用户将输入 start_date 和 end_date
我需要将此范围内的每个日期插入 belongs_to user
的表格中目前我只是在 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 :(得分: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上为start_date和end_date创建虚拟属性:
<强> 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