您可以在提交后使用 id 在控制器发布操作中再次加载事件类型,如下所示:
selected_type = EventType.find(params[:event_type]
保持对控制器的数据库调用也是一个好习惯,所以请把EventType.all
语句放在那里,并将它作为本地或类变量传递,就像你对event
.
如果您真的想在表单中传递名称而不是 id,则可以将:id
调用中的部分替换为类似 this的部分options_from_collection_for_select(@event_types, :name, :name, @event.event_type.name)
。请记住,这个值应该是唯一的!
该方法的工作原理如下:
options_from_collection_for_select(collection, value_method, text_method, selected = nil)
因此,第一个参数包含所有选项,第二个参数定义了这些选项对象中的值,这些选项对象被放入value
HTML 选项(由表单提交)的字段中,第三个定义了显示给用户的文本和最后一个参数定义value
所选条目的 (例如,如果您正在编辑条目)。对于最后一个参数,您需要使用事件的 event_type id,或者在您的情况下使用名称,因为您将value
HTML 标记的 设置为它。
使用 ApiDock 或 Rails 教程等页面获取其中一些方法的示例。
http://apidock.com/rails/ActionView/Helpers/FormOptionsHelper/options_from_collection_for_select