請在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
感謝您的回覆。我試過這兩種方法,似乎都沒有通過start_date和end_date方法** save_dates **。這可能是因爲它們嵌套在@ user.table.start_date?我需要稍微不同的語法嗎? – Chris
是的......在'user.rb'中,每當它說'start_date'或'end_date'時,它就是指User的實例。所以你可以把它想成'@ user.start_date'。因此您需要將其更改爲'table.start_date'和'table.end_date'。 – bricker