这可能是一个错误,因为我对Rails的最少理解以及如何在模型中使用变量,所以如果需要更多的代码来回答它或者我的术语不正确,让我知道,我会很乐意更新这个问题。传递一个实例变量到一个表格 - rails
我有一个帖子,我想让用户能够“喜欢”。尽管以下代码允许喜欢在单个帖子的页面上工作 - site.com:3000/posts/*post.id*
- 表单数据通过like[liked_post_id]:*post.id*
传递,当我尝试在配置文件中提交类似内容时 - site.com:3000/users/*user.id*
- 其中包含帖子提要,表单数据被传递是like[liked_post_id]:
(空白值)
如何将帖子内的帖子ID传递给liked_post_id
变量_like.html.erb
?
我注意到,相同形式的行为是/likes
。如果您在页面site.com:3000/posts/*post.id*
上,这只会起作用吗?我很好奇,如果我需要,当你在网页site.com:3000/users/*user.id*
从我的岗位以修改它,这样形式的作用是/posts/*post.id*/likes
:
#views/posts/_post.html.erb:
...
<%= render 'posts/like_form' if signed_in? %>
...
路线,以适当的形式:
#views/posts/_like_form.html.erb:
<div id="like_form">
<% if current_user.likes_this?(@post) %>
<%= render "posts/unlike" %>
<% else %>
<%= render "posts/like" %>
<% end %>
</div>
像:
#views/posts/_like.html.erb
<%= form_for Like.new, :remote => true do |f| %>
<%= f.hidden_field :liked_post_id, :value => @post.id %>
<%= f.submit "Like" %>
<% end %>
从型材(饲料帖子):
#views/users/show.html.erb
...
<%= render @posts %>
...
喜欢控制器:
#controllers/likes_controller.rb
class LikesController < ApplicationController
before_filter :signed_in_user
def create
@post = Post.find(params[:like][:liked_post_id])
current_user.like!(@post)
respond_to do |format|
format.html { redirect_to root_url }
format.js
end
end
...
用户模式:
#models/user.rb
...
def like!(post)
likes.create!(liked_post_id: post.id)
end
...
@弗兰克 - 暴雪已经指出,我的形式标记是一个问题。在帖子的页面生成的标记是:
<input id="like_liked_post_id" name="like[liked_post_id]" type="hidden" value="73" />
虽然饲料页:
<input id="like_liked_post_id" name="like[liked_post_id]" type="hidden" />
来调试您的视图_likes_的创建应该在控制器中完成。 – 2013-02-11 01:16:56
@代码源,请参阅上面的“编辑1:”,_like_正在类似的控制器中创建。 – 2013-02-13 16:32:29