Возможно, повторение того, что уже было написано, но ДА !!! Обоснование: найти ошибку только один раз. Если вы можете написать тест, который повторяет ошибку, вам не придется тестировать ее вручную - ваш автоматический тест найдет ее.
Тогда вы исправите ошибку, и вы можете быть в безопасности, зная, что ваше программное обеспечение никогда не будет страдать от этой ошибки снова. Это хорошо. Это сэкономит вам время. Это сэкономит вам деньги.
Похоже, вы предполагаете, что переменная @person все еще доступна из вашего исходного действия. Это может быть настроено фильтром для текущего человека, но вы не показываете это в своем вопросе.
Если вам нужно снова найти @person, вам придется передать идентификатор в своей удаленной_функции, я думаю .
У Райана Бейтса есть Railscast, в котором показано, как выбрать категорию для продукта или создать новую категорию путем ввода имени. Это похоже на сценарий, аналогичный тому, что у вас есть, поэтому вы можете проверить его: Создать модель с помощью текстового поля .
Мне потребовался целый день, чтобы придумать что-то, что хотя бы "сработает". Я также использую Кармен, а также возился с тегом select в форме модели form_for (фактически, fields_for вложено в forms_for ... что добавляет дополнительные сложности).
Я бы подумал, что есть лучшее решение, но это сработало для меня. Форма должна указывать на выбор, а на параметры - нет. Таким образом, в первый раз я использую метод Carmen state_select, который правильно заполняет тег select и все вложенные теги параметров. Во второй раз просто заменяю опции. Взгляните:
В представлении я решил использовать метод наблюдения_field, поскольку я делаю и другие вещи, помимо обновления состояний (некоторые другие изменения локализации), но это должно работать и для remote_function, и для других:
<%= address_form.country_select :country, {:prompt => "--Select One--"} %>
Дон ' Меня не смущает идентификатор (user_address_attributes_country), это просто моя глупая реализация forms_for / fields_for)
<%= observe_field :user_address_attributes_country, :url => { :action => :changecountry }, :with => 'new_country' %>
<%= address_form.state_select :state, @user.address.country, {:prompt => "--Select One--"}, :style => 'width: 90px' %>
Тогда в моем контроллере это выглядит просто так:
def changecountry
c = params[:new_country]
respond_to do |format|
format.html
format.js {
render :update do |page|
page['user_address_attributes_state'].innerHTML = \
"<option>--Select One--</option>" + state_options_for_select(nil, c)
end
}
end
end
Примечание: state_options_for_select
также принадлежит Кармен. Я не мог заставить его работать, если не поместил его в блок response_to, где, я думаю, доступны помощники представления. Кроме того, я жестко запрограммировал user_address_attributes_state
, который является моим вложенным идентификатором, сгенерированным из вызова рендеринга form_for / fields_for address_form.state_select в представлении.
Надеюсь, это поможет. Если кто-то может сделать это лучше, поверьте мне, я весь уши. Со временем я изменю дизайн ... но мне нужно было что-то, что сработало бы сегодня, и это было лучшее, что я мог придумать за ограниченное время.
state_options_for_select
также принадлежит Кармен. Я не мог заставить его работать, если не поместил его в блок response_to, где, я думаю, доступны помощники представления. Кроме того, я жестко запрограммировал user_address_attributes_state
, который является моим вложенным идентификатором, сгенерированным из вызова рендеринга form_for / fields_for address_form.state_select в представлении.
Надеюсь, это поможет. Если кто может сделать это лучше, поверьте мне, я весь уши. Со временем я изменю дизайн ... но мне нужно было что-то, что сработало бы сегодня, и это было лучшее, что я мог придумать за ограниченное время.
state_options_for_select
также принадлежит Кармен. Я не мог заставить его работать, если не поместил его в блок response_to, где, я думаю, доступны помощники представления. Кроме того, я жестко запрограммировал user_address_attributes_state
, который является моим вложенным идентификатором, сгенерированным из вызова рендеринга form_for / fields_for address_form.state_select в представлении.
Надеюсь, это поможет. Если кто-то может сделать это лучше, поверьте мне, я весь уши. Со временем я изменю дизайн ... но мне нужно было что-то, что сработало бы сегодня, и это было лучшее, что я мог придумать за ограниченное время.
Я жестко запрограммировал user_address_attributes_state
, который является моим вложенным идентификатором, сгенерированным из вызова рендеринга form_for / fields_for address_form.state_select в представлении.
Надеюсь, это поможет. Если кто может сделать это лучше, поверьте мне, я весь уши. Со временем я изменю дизайн ... но мне нужно было что-то, что работало бы сегодня, и это было лучшее, что я мог придумать за ограниченное время.
Я жестко запрограммировал user_address_attributes_state
, который является моим вложенным идентификатором, сгенерированным из вызова рендеринга form_for / fields_for address_form.state_select в представлении.
Надеюсь, это поможет. Если кто-то может сделать это лучше, поверьте мне, я весь уши. Со временем я изменю дизайн ... но мне нужно было что-то, что сработало бы сегодня, и это было лучшее, что я мог придумать за ограниченное время.