フォームの送信時にこのエラーが発生するのはなぜですか?私はすでにIDを確立していないのですか?form_forを送信するときにルートパラメータを使用できませんか?
私のPolls_Controller
では、すべてのフォーム入力をアクセス可能にしています。 poll_id
はルートのparamから来て、showルートは:id
に正常に応答します。私は自分のフォームを送信するときRailsはルート変更理由はそのPARAMへのアクセスを失うよう
def show
@poll_options = @poll.options
# since you can respond to a poll from its show route
@poll_response = PollResponse.new
end
def responses
@poll_response = PollResponse.create(
params.require(:poll_response).permit(:poll_option_id, :ip_address, :poll_id)
)
if @poll_response.save
redirect_to "/welcome"
else
end
end
private
def set_poll
@poll = Poll.find(params[:id])
end
マイビューの表示が正常に読み込ま/polls/:id
で、しかし、それが見えます。
#Poll/Show.html.erb
<%= form_for(@poll_response, url: '/polls/:poll_id/responses/') do |f| %>
<%= f.hidden_field(:ip_address, value: request.remote_ip) %>
<%= f.hidden_field(:poll_id, value: @poll.id) %>
<ul>
<% @poll_options.each do |option_id, option_value| %>
<li>
<%= f.radio_button(:poll_option_id, option_id) %>
<%= option_value %> </br>
</li>
<% end %>
</ul>
<%= f.submit "Vote!" %>
<% end %>
ここに私のルートがあります。 Poll_ResponseとPoll_OptionモデルはPollに属します。
resources :polls, only: [:show, :create, :index, :responses] do
post 'responses', as: :responses
end
あなたは 'set_poll'をどこかで呼びますか?多分 'before_action set_poll、only:[:show]' – rogelio