Rails 3: отправка локальной переменной в контроллере для просмотра?

#ruby-on-rails #ruby-on-rails-3

#ruby-на-рельсах #ruby-on-rails-3

Вопрос:

новичок в rails и действительно новичок в jquery. Я настроил некоторый рендеринг страницы AJAX, добавив respond_to :html, :js в свой контроллер и respond_to @Posts в метод posts#index. Он частично отображает мои просмотры / сообщения /_posts.html.erb с использованием AJAX, однако мне нужен был HTML-ответ, чтобы направить его в то же место, поэтому я попытался добавить respond_to do |format| блок.

индекс сообщений#

 @posts = ...

respond_to do |format|
  format.html { render 'posts/_posts' }
  format.js   { respond_with @posts } 
 

Это работает и отправляет мой :html ответ в правильное представление, но у меня проблема с переменными. В моих сообщениях #index используется переменная @posts, но мои views/posts/index.js.erb файлы делают это:

 $('#stream').html('<%= escape_javascript(render "posts", :posts => @posts) %>');
 

Так что мои views/posts/_posts.html.erb поиски posts вместо @posts

 <% posts.each do |post| %>
  <%= render 'shared/feed_item', :feed_item => post %>
<% end %>
 

Я попытался отправить локальную переменную с контроллера, как показано ниже, но это не сработало:

индекс сообщений#

 @posts = ...

respond_to do |format|
  format.html { render 'posts/_posts', :posts => @posts }
  format.js   { respond_with @posts }
 

Есть какие-нибудь идеи, как отправить, чтобы это заработало? Большое спасибо.

Ответ №1:

У меня есть что-то похожее на такую работу:

format.html { render "posts/_posts", :locals => { :posts => @posts } }