使用jQuery在rails中渲染like /不同的按钮

时间:2011-12-18 15:05:32

标签: ruby-on-rails-3

我正在使用jquery在故事中呈现类似按钮。我有两个模型storylike

以下是控制器代码:

 def create
    @like = Like.new(params[:like])
    @story = Story.find(params[:story])
    @like.story = @story

    if @like.save
      respond_to do |format|
        format.html
        format.js
      end
    end
  end

  def destroy
    @like = Like.find(params[:id])
    #@story = @like.story
    @like.destroy

    respond_to do |format|
      format.html { redirect_to stories_url }
      format.js
      format.json { head :ok }
    end
  end

这是按钮部分(stories / like_button):

<% unless user_likes_story?(@story, current_user) %>
    <%= button_to 'like', "/likes?story=#{@story.id}", :id => 'like_button', :remote => true %>
<% else %>
    <%= button_to 'liked', @liked, :class => 'like_button unlike', :id => 'unlike_button', :remote => true, method: :delete %>
<% end %>

问题是我的create.js.erb在渲染'不赞'按钮时没有正确加载@liked实例变量,因为它是在故事控制器的#show动作中设置的用户已经喜欢这个故事了,所以我无法弄清楚如何设置它,所以JS会正确地渲染它。我可能比现在更努力,但是......

create.js.erb

$('.button_to').replaceWith('<%=j render 'stories/like_button' %>');
$('#story_likes_count').replaceWith('<%=j render 'stories/likes_count' %>');

以下是我在故事#show

中尝试设置@liked的方法
def show
    @like = Like.new
    @story = Story.find(params[:id])
    if current_user
      @liked = Like.find_by_user_id_and_story_id(current_user,@story)
    end

    respond_to do |format|
      format.html # show.html.erb
      format.json { render json: @story }
    end
  end

知道怎么做得好吗?我应该将部分移出故事文件夹吗?

1 个答案:

答案 0 :(得分:0)

解决方案非常简单。在控制器中,执行此操作:

 format.js {@liked = @like}

传递变量并使其在渲染时可用于部分。