2015-06-20 2 views
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' 

ответ

0

установил его с:

_like.html.erb

<% if like = current_user.likes.find_by_recipe_id(@recipe.id) %> 
    <% else %> 
    <%= form_for current_user.likes.build(:recipe_id => @recipe.id), :remote => true do |f| %> 
    <%= f.hidden_field :recipe_id %> 
    <%= f.hidden_field :user_id %> 
    <%= f.submit "Like" %> 
    <% end %> 
<% end %> 
Смежные вопросы