将start_date转换为end_date为数组/#和Update嵌套表

时间:2011-10-08 16:03:34

标签: ruby-on-rails-3

用户将输入 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 []

任何人对我应如何处理此事有任何想法?

由于

1 个答案:

答案 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
相关问题