0
Я собираюсь построить подобный механизм для своего класса рецептов.Rails простая кнопка с ajax jQuery
class LikesController
def update
@like = Like.find(params[:id])
end
def destroy
@like = Like.find(params[:id])
@recipe = Recipe.find(params[:id])
@like.destroy
end
end
def show
@recipe = Recipe.find(params[:id])
end
рецепты/show.html.erb
<div id="like_form">
<% if like = current_user.likes.find_by_recipe_id(@recipe.id) %>
<%= form_for like, :html => { :method => :delete },:remote => true do |f| %>
<%= f.submit "Unlike" %>
<% end %>
<% else %>
<%= form_for current_user.likes.create(:recipe_id => @recipe.id), :remote => true do |f| %>
<%= f.hidden_field :recipe_id %>
<%= f.hidden_field :user_id %>
<%= f.submit "Like" %>
<% end %>
<% end %>
любит/destroy.js.erb
$("#like_form").html("<%= escape_javascript(render('recipes/like')) %>")
любит/update.js.erb
$("#like_form").html("<%= escape_javascript(render('recipes/unlike')) %>")
рецепты /_unlike.html.erb
<%= form_for @like, :html => { :method => :delete },
:remote => true do |f| %>
<%= f.submit "Unlike" %>
<% end %>
рецепты/_like.html.erb
<%= form_for current_user.likes.create(:recipe_id => @recipe.id), :remote => true do |f| %>
<%= f.hidden_field :recipe_id %>
<%= f.hidden_field :user_id %>
<%= f.submit "Like" %>
<% end %>
После нажатия на кнопку "В отличие от", кнопка "Like" должны быть оказаны. Но я не знаю, как сделать аргумент form_for в _like.html частичном.
Я не знаю, как получить значение для recipe.id. Как я могу сделать recipe.id доступным в _like.html.erb?
ActionView::Template::Error (undefined method `id' for nil:NilClass):1:
<%= form_for current_user.likes.create(:recipe_id => @recipe.id),
:remote => true do |f| %>
2: <%= f.hidden_field :recipe_id %>
3: <%= f.hidden_field :user_id %>
4: <%= f.submit "Like" %>
app/views/recipes/_like.html.erb:1:in
_app_views_recipes__like_html_erb___1003281063_65806008'
app/views/likes/destroy.js.erb:1:in
_app_views_likes_destroy_js_erb___41116873_65874912'