编辑表单在加密值后具有错误的选定值

时间:2015-05-20 03:14:44

标签: ruby-on-rails ruby-on-rails-4

我在控制器上有私有方法

webview.setWebViewClient(new WebViewClient());

关于private def set_address @address = Address.find(params[:id]) end def city_options @city_options = [] if @address @city_options = City.where(province_id: @address.province_id).collect{ |x| [x.name, x.id] } end end

的观点
_form.html.erb

在新表单上很好,编辑有正确的选择值,但是当我在<%= f.select :city_id, @city_options, { :prompt => I18n.t('prompt.select_city') }, class: 'select-city text address-city' %> 方法中加密id时

city_options

显示城市列表,并且id的值被加密,但错误选择了城市的值,只选择了列表顶部的id。

1 个答案:

答案 0 :(得分:0)

选择了错误的值,因为保存的city_id与任何选择列表选项的encrypted_id都不匹配。

要克服它,您可以使用options_for_select方法。如果encrypted_id方法是辅助方法

,请尝试以下操作
<%= f.select :city_id, options_for_select(@city_options, selected: encrypted_id(f.object.city_id)), { :prompt => I18n.t('prompt.select_city') }, class: 'select-city text address-city' %>

点击此链接http://apidock.com/rails/v3.1.0/ActionView/Helpers/FormOptionsHelper/options_for_select

如果encrypted_id方法是控制器方法,则通过从控制器加密来传递当前选择的值。或者你可以使用 控制器中helper_method :encrypted_id使视图中的encrypted_id方法可用,并且可以使用上述方法