【发布时间】:2016-02-04 12:11:39
【问题描述】:
我有我认为一定是一个简单的问题,但我就是想不通。我正在尝试在创建另一个模型时更新一个模型中的属性。
在我看来:
<%= link_to 'Click here to rate this user', new_user_review_path(:user_id => request.user.id, :gigid => request.gig.id), remote: true %>
通过参数:gigid 和:user_id
比我的控制器:
def new
@review = Review.new
@gig = Gig.find(params[:gigid])
end
def create
@review = @user.reviews.new review_params
@review.reviewed_id = current_user.id
if @review.save
@gig.update(reviewed: true)
respond_to do |format|
format.html {redirect_to session.delete(:return_to), flash[:notice] = "Thankyou for your rating!"}
format.js
end
else
render 'new'
end
end
但我得到undefined method 'update'for nil:NilCLass:
我知道参数正在传递,“Gig”可以更新为:
def new
@review = Review.new
Gig.find(params[:gigid]).update(reviewed: true)
end
可以正常更新属性,但是当我点击“新评论”时,不会在实际创建评论时。
添加:
def create
@review = @user.reviews.new review_params
@review.reviewed_id = current_user.id
if @review.save
Gig.find(params[:gigid]).update(reviewed: true)
etc etc etc
给我同样的undefined method 'update'for nil:NilCLass:
我尝试过使用find_by_id 而不是find,这没什么区别。
编辑:
def create
@gig = Gig.find params[:gigid]
@review = @user.reviews.new review_params
@review.reviewed_id = current_user.id
if @review.save
@gig.update(reviewed: true)
etc etc etc
也不行。我没有收到任何错误,但演出 ID 仍然是“nil”。
参数传递给“新建”操作,而不是“创建”操作。我觉得这应该很容易,但我现在还没有看到。
【问题讨论】:
-
你得到那个错误是因为 Gig.find(params[:gigid]) 返回 Nil。确保 params[:gigid] 是 db 中存在的有效 id,以便它可以找到它。在尝试调用更新方法之前应该可能做一个不为零的检查。
-
那么我很困惑。您的“新”操作不会呈现模板或任何内容?你怎么称呼“创造”?您的 link_to 会生成一个指向您的“新”操作的链接。
-
我是通过 ajax 进行的,但没有 javascript,我会被重定向到呈现部分表单的“新”评论页面。然后我填写并保存/创建评论。我希望属性在保存/创建时更新。
标签: ruby-on-rails controller params link-to