我创建了一个Rails表单,用以下字段创建一个“事件”(嵌套在一个组资源中)。字段when
和exactwhen
(名字非常简单,我知道,我只是创建一个快速演示)是指日期和时间
<%= form_for [@group, @event], url: {action: "create"}, html: {class: "nifty_form"} do |f| %>
<%= label_tag(:title, "Event Title") %>
<%= f.text_field :title %>
<%= label_tag(:description, "Event Description") %>
<%= f.text_area :description, size: "60x12" %>
<%= label_tag(:address, "Address") %>
<%= f.text_field :address %>
<%= label_tag(:when, "When") %>
<%= text_field_tag(:when) %>
<%= label_tag(:exactwhen, "exactwhen") %>
<%= text_field_tag(:exactwhen) %>
<%= f.submit "Create" %>
<% end %>
这些字段存在于数据库中的事件模型
中 create_table "events", force: true do |t|
t.string "title"
t.text "description"
t.string "address"
t.datetime "created_at"
t.datetime "updated_at"
t.integer "group_id"
t.date "when"
t.time "exactwhen"
end
但是,当我提交表单时,您会注意到when
和exactwhen
未包含在事件哈希中
Parameters: {"utf8"=>"✓", "authenticity_token"=>"5kkL2a3yDHEINSqSg+1cXd708GtRPgymbKmASs+eih8=", "event"=>{"title"=>"First Wankers Meeting", "description"=>"get drunk", "address"=>"57 Robert Crescent"}, "when"=>"08/23/2013", "exactwhen"=>"12", "commit"=>"Create", "group_id"=>"38"}
并且when
和exactwhen
的数据未插入记录
Group Load (0.6ms) SELECT "groups".* FROM "groups" WHERE "groups"."id" = $1 LIMIT 1 [["id", "38"]]
(0.2ms) BEGIN
SQL (2.0ms) INSERT INTO "events" ("address", "created_at", "description", "group_id", "title", "updated_at") VALUES ($1, $2, $3, $4, $5, $6) RETURNING "id" [["address", "57 Robert Crescent"], ["created_at", Sat, 03 Aug 2013 16:38:30 UTC +00:00], ["description", "get drunk"], ["group_id", 38], ["title", "First Wankers Meetup"], ["updated_at", Sat, 03 Aug 2013 16:38:30 UTC +00:00]]
我假设when
和exactwhen
的表单数据没有插入数据库,因为它们不在事件哈希中。如果是这样的话,你能解释一下原因,或解释我怎么能解决这个问题?
这是events_controller.rb
中的创建操作 def create
@group = Group.find(params[:group_id])
@event = @group.events.build(event_params)
if @event.save
....
private
def event_params
params.require(:event).permit(:title, :description, :when, :exactwhen, :address)
end
答案 0 :(得分:0)
使用f.text_field
代替text_field_tag
,就像使用前几个表单字段一样
答案 1 :(得分:0)
您正在使用form_for。将所有字段(和标签)更改为普通字段,而不是标记字段。因此,将text_field_tag更改为text_field。
如果你这样做,一切都应该有效。然后所有属性都应该在正确的params散列中。
有关详细信息,请查看rails api docs中的form_for。