Передача идентификатора поста в отдельный контроллер из Posts / index.html.erb - PullRequest
0 голосов
/ 06 ноября 2010

Я пытаюсь разрешить голосование по сообщениям в блоге Ruby on Rails, который я создал.Я действительно не хочу идти по плагину или гемам, потому что я думаю, что я близок.Вот ситуация:

Я отображаю все свои сообщения в /posts/index.html.erb через частичный _post.html.erb.В каждом сообщении я отображаю следующий код для кнопки голосования:

   <% remote_form_for [@post, Vote.new] do |f| %>
     <%= f.hidden_field :ip_address, :value => "#{request.remote_ip}" %>
     <%= submit_tag 'Me Too', :class => 'voteup' %>
   <% end %>

, который отправляет запрос через контроллер голосов:

  def create
    @post = Post.find(params[:post_id])
    @vote = @post.votes.create!(params[:vote])


       respond_to do |format|
       format.html { redirect_to @posts}
       format.js
     end
  end

Я получаю ошибку Couldn't find Post without an IDчто имеет смысл, потому что я не на странице /posts/show.html.erb.

Есть ли способ, которым я могу передать post_id контролеру голосов (и в столбец post_id в таблице голосов) из представления /posts/index.html.erb?

1 Ответ

0 голосов
/ 06 ноября 2010

Попробуйте добавить это в представление, после remote_form_for:

<%= f.hidden_field :post_id, :value => @post.id %>

Вам также может понадобиться это в def create

@post = Post.find(params[:vote][:post_id]) #note the added [:vote]

Если вы посмотрите напараметры после этих изменений должны показывать:

{"vote"=>{"ip_address"=>"127.0.0.1", "post_id"=> >>actual-post-id-here<< },
"commit"=>"Vote Up ↑" ..........

Кроме того, я рекомендую взглянуть на превосходный RailsCasts от Райана Бейтса .Там много отличных видеоуроков.

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