【发布时间】:2016-01-13 17:13:30
【问题描述】:
我很困惑为什么这不起作用。我有一个评论系统,以及一个创建新评论的链接,通过 2 个属性; user_id 和 gigid。两个 id 都生成为整数,但是当我保存评论时,gigid 保存为“nil”而不是整数。
查看:
<%= link_to 'Click here to rate this user', new_user_review_path(:user_id => request.user.id, :gigid => request.gig.id) %>
这里两个 ID 都设置正确(根据服务器输出)。 User_id 是要审核的用户(正常工作),gigid 是后期验证的参考。 (在我尝试保存之前正常工作)
_form :
<%= simple_form_for([@user, @user.reviews.build]) do |f| %>
<div id="rating-form">
<label>Rating</label>
</div>
<%= f.input :comment %>
<%= f.button :submit %>
<% end %>
控制器:
def new
if user_signed_in?
@review = current_user.reviews.new
else
redirect_to(root_url)
flash[:danger] = "You must log in to rate a user"
end
end
def create
@review = @user.reviews.new review_params
@review.reviewed_id = current_user.id
if @review.save
redirect_to user_path(@user)
else
render 'new'
end
end
private
def review_params
params.require(:review).permit(:rating, :comment, :gigid, :user_id)
end
end
点击链接时的服务器输出:
Started GET "/users/21/reviews/new?gigid=17&locale=en" for 127.0.0.1 at 2016-01-13 18:08:26 +0100
Processing by ReviewsController#new as HTML
Parameters: {"gigid"=>"17", "locale"=>"en", "user_id"=>"21"}
User Load (0.2ms) SELECT "users".* FROM "users" WHERE "users"."id" = ? LIMIT 1 [["id", 21]]
User Load (0.2ms) SELECT "users".* FROM "users" WHERE "users"."id" = ? ORDER BY "users"."id" ASC LIMIT 1 [["id", 1]]
Rendered reviews/_form.html.erb (4.9ms)
然后我添加评论和评级并单击创建。 单击创建时的服务器输出:
Started POST "/users/21/reviews?locale=en" for 127.0.0.1 at 2016-01-13 18:10:44 +0100
Processing by ReviewsController#create as HTML
Parameters: {"utf8"=>"✓", "authenticity_token"=>"RToZwvodvXxQp1/spEhgemO/oi+4rof8jREuLw27CcEsEBqFWGLeYne1CgH3kvWu9OzAV+bHvOk9g9nq8JMPnw==", "review"=>{"rating"=>"5", "comment"=>"sdfsdfdd"}, "commit"=>"Create Review", "locale"=>"en", "user_id"=>"21"}
User Load (0.3ms) SELECT "users".* FROM "users" WHERE "users"."id" = ? LIMIT 1 [["id", 21]]
User Load (0.4ms) SELECT "users".* FROM "users" WHERE "users"."id" = ? ORDER BY "users"."id" ASC LIMIT 1 [["id", 1]]
(0.1ms) begin transaction
SQL (0.7ms) INSERT INTO "reviews" ("rating", "comment", "user_id", "reviewed_id", "created_at", "updated_at") VALUES (?, ?, ?, ?, ?, ?) [["rating", 5], ["comment", "sdfsdfdd"], ["user_id", 21], ["reviewed_id", 1], ["created_at", "2016-01-13 17:10:44.675386"], ["updated_at", "2016-01-13 17:10:44.675386"]]
(93.6ms) commit transaction
我注意到“gigid”在这里被完全忽略了,但其他一切都很好。 我不明白为什么一个属性保存而另一个不保存,任何见解将不胜感激!
【问题讨论】:
-
可以发一下表格代码吗?
-
我使用的是 link_to 而不是表单。引用代码的第一位是我正在使用的代码。
-
#new操作代码在哪里? -
我的意思是你用来将属性值发布到数据库的表单。
-
发布您的
_form.html.erb代码。
标签: ruby-on-rails model attributes