我在控制器上有私有方法
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。
答案 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方法可用,并且可以使用上述方法