これは、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
変数 inに渡すにはどうすればよい_like.html.erb
ですか?
/likes
like フォームのアクションが軒並みあることに気付きました。これは、ページにいるときにのみ機能しますsite.com:3000/posts/*post.id*
か? /posts/*post.id*/likes
あなたがページにいるときにフォームのアクションが行われるように、それを変更する必要があるかどうか興味がありますsite.com:3000/users/*user.id*
私の投稿ビューから:
#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
...
@frank-blizzard は、私のフォーム マークアップに問題があると指摘しました。投稿のページで生成されるマークアップは次のとおりです。
<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" />