Rails 3 View / Controller: передача или обновление измененных параметров пройдены? («Новые» работы) - PullRequest
0 голосов
/ 30 марта 2012

Что-то странное происходит с моим приложением Rails.Когда я пытаюсь отправить команду обновления на один из моих контроллеров, по какой-то причине кнопка отправки, кажется, изменяет некоторые параметры.

Я использую вложенные ресурсы и настраиваю расы, в которых есть участники.Довольно простоПо какой-то причине, однако, когда я пытаюсь обновить участника, он меняет значение: race_id на id участника (: id).

Хотя это происходит только при обновлении.Мне кажется, что я могу отлично создавать новых участников, используя ту же самую форму и, таким образом, ту же самую кнопку отправки.

Вот некоторый соответствующий код:

_form.rb(используется new и update)

<%= form_for ([:race, @participant])  do |f| %>
    <%= f.error_messages %>
    <p>
        <%= f.label :name %><br />
        <%= f.text_field :name %>
    </p>
    <p><%= f.submit %></p>
<% end %>

members_controller.rb

class ParticipantsController < ApplicationController
    before_filter :authenticate_user!, :only => [:edit, :update, :destroy, :create, :new]
    before_filter :set_up_race

...

    def create
        @participant = @race.participants.new(params[:participant])
        if @participant.save
            redirect_to setup_race_path(@race), :notice => "Successfully created participant."
        else
            render :action => 'new'
        end
    end

...

    def update
        @participant = Participant.find(params[:id])
        if @participant.update_attributes(params[:participant])
            redirect_to setup_race_path(@race), :notice  => "Successfully updated participant."
        else
            render :action => 'edit'
        end
    end

...

    def set_up_race
        @race = Race.find(params[:race_id])
    end
end

Вот почему кажется, что параметры изменяются: Если я изменяюфайл _form.rb для включения <%= params[:race_id] %> Экран сообщает мне 3

Когда я нажимаю на кнопку отправить, я получаю:

Не удалось найти Race с id = 25

Запрос

Параметры:

{"utf8" => "✓", "_method" => "put", "authenticity_token" => "4VCZP9sI / iv8n454I8AE76n5vLiwGayuXc1NrPYfG,"member" => {"name" => "hgdjhgf"}, "commit" => "Обновить участника", "race_id" => "25", "id" => "25"}

(Как вы можете видеть в параметрах, "race_id" => "25" после того, как я нажму "отправить", но на странице изначально было: race_id => "3" (доказано выше, и снова, если я что-то сделаю, чтобы сделать формукраш)).

Итак квестИон, после всего этого, почему: race_id изменяется где-то между представлением и контроллером?

EDIT: вот вывод рейковых маршрутов, согласно запросу Джеффа: http://dylancodes.net/personal/ARTk/images/routes.png

1 Ответ

1 голос
/ 30 марта 2012

Как выглядит URL, который отправляет ваша форма? Исходя из ваших маршрутов, я ожидал бы, что он будет выглядеть примерно как /races/3/participants/25. Из того, что я прочитал, строка

form_for ([:race, @participant]) do |f|

создает маршрут с пространством имен (поиск "namespaced" на этой странице), который будет выглядеть как /races/participants/25.

Может ли изменение этой строки для вас работать?

form_for [@race, @particpant] do |f|

Это должно создать URL формы как /races/:race_id/participants/:id.

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