Рендеринг кнопки «Мне нравится / не нравится» в рельсах с помощью jQuery - PullRequest
0 голосов
/ 18 декабря 2011

Я использую 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

Есть идеи, как это сделать правильно?Стоит ли просто переместить частичку из папки историй?

1 Ответ

0 голосов
/ 18 декабря 2011

Решение было довольно простым.В контроллере, сделав это:

 format.js {@liked = @like}

Передает переменную и делает ее доступной для частичного, когда она отображается.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...