2011-07-14 11 views
1

私は多くを検索しましたが、この問題の一般的な原因はattr_ascessibleです:model_attributesは宣言されていませんが、Railsのネストされたフォームはデータベースにヌル属性を挿入します

以下のログを見てください:referee、:ticket_orderの値はparamsハッシュに含まれていますが、テーブルにはnullとして挿入されます。 user_idとevent_idの外部キーは、エラーなしで新しいレコードに保存されます。大量割り当てに関する警告はattr_ascessible宣言に私を導き、運のないさまざまなバリエーションを試しました。私はdeviseを使用しています。

開発ログ

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 %> 
+1

多分ここの関係を複数形: 'フォーム.semantic_fields_for:relationship' – apneadiving

+0

これは質問ですが、必ずしも答えはありません。パラメータでは、「関係」は複数であるべきですか?それは多対多の関係のように見えるものにマップされ、それらは複数化されてリストを期待していますか? – jaydel

+0

@Seho Cahill:有効な回答を受け入れることを忘れないでください:それはプロセスの一部です – apneadiving

答えて

2

はい、それはこの、置き換えなければなりません:

form.semantic_fields_for :relationship 

と:

form.semantic_fields_for :relationships 
+0

ありがとうございます。フォームの振る舞いは、私が期待していたものではないようですが、私はそれを自分で修正するつもりです。 –

+0

...それはとても迷惑だった。私は実際に文字s(すなわち設定)で終わったモデルを持っていて、fields_for:settings ...を持っていました。これはfields_for:settingに変更しなければならなくなりました(設定モデルがないので意味がありません)。 – you786

+0

@ you786 yeah ...このようなエッジケースを避けるために、ルールを守らなければなりません – apneadiving

関連する問題