我正在使用jquery在故事中呈现类似按钮。我有两个模型story
和like
以下是控制器代码:
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
知道怎么做得好吗?我应该将部分移出故事文件夹吗?
答案 0 :(得分:0)
解决方案非常简单。在控制器中,执行此操作:
format.js {@liked = @like}
传递变量并使其在渲染时可用于部分。