我在两个模型,列表和用户之间存在多对多的关系。
当用户创建列表时,它应自动将其添加到User.lists数组中。现在,我有这个工作,但它闻起来有点:
def create
@list = current_user.lists.new(params[:list])
current_user.lists << @list
有没有办法将它降到一行?不使用&lt;&lt;将@list传递到集合中但是当我构建新列表时会自动将它存在吗?
由于
答案 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。