這可能是一個錯誤,因爲我對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