Rails 3 - Controller创建具有多对多关系的动作

时间:2011-08-29 19:24:13

标签: ruby-on-rails

我在两个模型,列表和用户之间存在多对多的关系。

当用户创建列表时,它应自动将其添加到User.lists数组中。现在,我有这个工作,但它闻起来有点:

def create
    @list = current_user.lists.new(params[:list])
    current_user.lists << @list

有没有办法将它降到一行?不使用&lt;&lt;将@list传递到集合中但是当我构建新列表时会自动将它存在吗?

由于

2 个答案:

答案 0 :(得分:2)

你必须这样做:

@list = current_user.lists.create(params[:list])

答案 1 :(得分:0)

我建议采用略有不同的方法来帮助您进行验证。

def create
  @list = current_user.lists.new(params[:list])
  respond_to do |format|
    if (current_user.lists << @list rescue false)
      format.html {...}
    else
      format.html {...}
    end
  end
end

最大的不同是

current_user.lists << @list

如果成功保存则返回列表(如果结果不是false或nil则解释为true),如果失败则返回异常,然后解救并返回false。这取代了传统的

@list.save

返回false,如果不是,则返回nil。正确设置respond_to块内if语句的逻辑。

它会将您的代码行减少1。