Я использую 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
Это частичная кнопка (story / 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' %>');
Вот как я пытался установить @liked в историях # show
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
Есть идеи, как это сделать правильно?Стоит ли просто переместить частичку из папки историй?