Определение локальных переменных в частичных шаблонах с использованием AJAX / Ruby on Rails - PullRequest
2 голосов
/ 18 марта 2012

У меня есть глубоко вложенное частичное представление, где я перебираю коллекцию @users.Контроллер определяет @users следующим образом:

class UsersController < ApplicationController

def following
  @users = @user.followed_users
  ..
end

В частичных шаблонах я перебираю коллекцию, но никогда не определяю индивидуума коллекции как переменную экземпляра, вместо этого я передаю локальные переменныевместе с :object:

<% if current_user.following?(user) %>
  <%= render partial: 'unfollow', object: user, as: :user %>
<% else %>
  <%= render partial: 'follow', object: user, as: :user %>
<% end %>

Проблема в ...

Внутри файла create.js.erb, который обрабатывает действие Follow , например, я используюследующий код:

$('#follow_form').html("<%=j render partial: 'users/unfollow', object: user, as: :user %>");

Это дает мне следующие ошибки из моего журнала разработки:

ActionView :: Template :: Error (неопределенная локальная переменная или метод `user 'для #<#: 0x007fa17b9e57e0>):

Объявляю ли я частичное неверное в jQuery?Нужно ли определять user где-то еще, как в контроллере?Если да, то как мне определить индивидуума коллекции как переменную экземпляра ?

Заранее спасибо!

РЕДАКТИРОВАТЬ: Включен связанный контроллер

Вот соответствующий контроллер, который обрабатывает запрос:

class RelationshipsController < ApplicationController

def create
debugger
@user = User.find(params[:relationship][:followed_id])
current_user.follow!(@user)
respond_to do |format|
  format.html { redirect_to @user }
  format.js
end
end

1 Ответ

0 голосов
/ 18 марта 2012

@ Dipil помог мне с простым решением замены локальной переменной user переменной экземпляра @user, установленной в контроллере. Это сработало отлично.

Окончательный результат после незначительного рефакторинга:

$("#follow_form").html("<%=j render partial: 'users/unfollow', locals: { user: @user } %>");
...