2011-10-08 11 views
0

用戶將輸入一個START_DATEEND_DATE轉換起始日期到END_DATE到陣列/#和更新嵌套表

我需要此範圍內的每個日期插入到一個表,該表belongs_to的用戶

此刻,我只是有標準的更新代碼在user_controller.rb

def update 
    @user = User.find(params[:id]) 
    if @user.update_attributes(params[:user]) 
     redirect_to @user, :notice => "Successfully updated user." 
    else 
     render :action => 'edit' 
    end 
    end 

我敢肯定,這是很容易通過的日期迭代和哈希甩掉他們,但我不知道如何給它分配回PARAMS []

任何人有,我應該如何處理任何想法這個?

感謝

回答

0

請在User類中的方法:

user.rb

def save_dates(start_date, end_date) 
    date = start_date 
    while date <= end_date 
    user_dates.create(:the_date => date) # class UserDate, belongs_to :user 
    date += 1.day 
    end 
end 

user_controller.rb

def update 
    @user = User.find(params[:id]) 
    if @user.update_attributes(params[:user]) 
    @user.save_dates(params[:user][:start_date], params[:user][:end_date]) 
    redirect_to @user, :notice => "Successfully updated user." 
    else 
    render :action => 'edit' 
    end 
end 

也許不是最優雅解決方案,但它應該工作。如果您想徹底將其移動到模型,並使用一個回調,你必須創建起始日期日期和結束日期上的用戶虛擬屬性:

user.rb

attr_accessor :start_date, :end_date 
validates_presence_of :start_date, :end_date 
after_update :save_dates 
def save_dates 
    date = start_date 
    while date <= end_date 
    user_dates.create(:the_date => date) # class UserDate, belongs_to :user 
    date += 1.day 
    end 
end 

user_controller.rb

def update 
    @user = User.find(params[:id]) 
    if @user.update_attributes(params[:user]) 
    redirect_to @user, :notice => "Successfully updated user." 
    else 
    render :action => 'edit' 
    end 
end 
+0

感謝您的回覆。我試過這兩種方法,似乎都沒有通過start_date和end_date方法** save_dates **。這可能是因爲它們嵌套在@ user.table.start_date?我需要稍微不同的語法嗎? – Chris

+0

是的......在'user.rb'中,每當它說'start_date'或'end_date'時,它就是指User的實例。所以你可以把它想成'@ user.start_date'。因此您需要將其更改爲'table.start_date'和'table.end_date'。 – bricker