Rails嵌套表单在数据库中插入空属性
我搜索了很多,这个问题的常见原因是attr_ascessible:model_attributes没有被声明,但我似乎无法得到它的工作。Rails嵌套表单在数据库中插入空属性
查看下面的日志:裁判和:ticket_order值在params散列中,但随后在表中插入为null。 user_id和event_id的外键保存在新记录中,没有任何错误。关于大规模分配的警告让我接触到attr_ascessible声明,尝试了它的不同变化,但没有运气。我正在使用设计。
开发日志
Started POST "/events/1" for 127.0.0.1 at 2011-07-14 17:38:16 +0100
Processing by EventsController#update as HTML
Parameters: {"utf8"=>"✓", "authenticity_token"=>"ddddddjTdnaLKQgZncSDGYt63JA=", "event"=>{"relationship"=>{"event_id"=>"1", "referee"=>"9", "ticket_order"=>"1"}}, "commit"=>"Confirm Purchase", "id"=>"1"}
User Load (20.0ms) SELECT "users".* FROM "users" WHERE "users"."id" = 8 LIMIT 1
Event Load (13.1ms) SELECT "events".* FROM "events" WHERE "events"."id" = 1 LIMIT 1
AREL (18.7ms) INSERT INTO "relationships" ("user_id", "event_id", "created_at", "updated_at", "referee", "ticket_order") VALUES (8, 1, '2011-07-14 16:38:16.963351', '2011-07-14 16:38:16.963351', NULL, NULL)
WARNING: Can't mass-assign protected attributes: relationship
[paperclip] Saving attachments.
Redirected to http://localhost:3000/events/1
Completed 302 Found in 588ms
活动
class Event < ActiveRecord::Base
attr_accessible :artist, :venue, :show_info, :date, :doors, :ticket_issue, :ticket_price,
:travel_cost, :accomodation_cost, :hire_cost, :image, :avatar_url, :relationships_attributes, :referee, :ticket_order
has_many :relationships
has_many :users, :through => :relationships
accepts_nested_attributes_for :relationships
活动控制器
def new
@event = Event.new
@users = Relationships.find(:all)
relationship = @event.relationships.build()
end
def create
@event = Event.new(params[:event])
current_user.attend!(@event)
if @event.save
redirect_to @event, :notice => "Successfully created event."
else
render :action => 'new'
end
end
User.rb
def attending?(event)
relationships.find_by_event_id(event)
end
Relationship.rb
class Relationship < ActiveRecord::Base
belongs_to :user
belongs_to :event
attr_accessible :event_id
表单视图
<%= semantic_form_for @event do |form| %>
<%= form.semantic_fields_for :relationship do |builder| %>
<%= builder.hidden_field :event_id, :value => @event.id %>
<%= builder.inputs do %>
<%= builder.input :referee, :as => :select, :collection => @event.users.all %>
<%= builder.input :ticket_order, :as => :number %>
<% end %>
<% end %>
是的,它必须是这个,替换:
form.semantic_fields_for :relationship
有:
form.semantic_fields_for :relationships
谢谢。似乎表单行为并不完全符合我的期望,但我会自己去解决这个问题。 –
...那太恼人了。我实际上有一个以字母s结尾的模型(即设置),并且我有fields_for:settings ...我最终不得不将其更改为fields_for:setting(这没有任何意义,因为没有Setting模型。) – you786
@ you786是的...应该遵循Rails约定来避免这种边缘情况 – apneadiving
也许这里以复数的关系:'形式.semantic_fields_for:relationship' – apneadiving
这是一个问题,不一定是答案:在参数中,“关系”应该是复数?它将映射成看起来像多对多的关联,并且这些关联被复数化并期望列表,不是? – jaydel
@Seho Cahill:请不要忘记接受有效答案:这是过程的一部分 – apneadiving