2011-05-14 3 views
4

중첩 된 특성 및 장치에 문제가 있습니다. How do I use nested attributes with the devise model과 유사한 문제입니다. 지금까지 내가 여기에 권장 내가 모든 것을 설정할 수있어 한 말할 수 : 나는 사용자 및 구독에 대한 연결을 설정 한 Override devise registrations controller중첩 된 특성을 Devise와 함께 사용할 때 질량 지정 경고

, 내가 "accepts_nested_attributes_for" 있고, attr_accessible에서 :subscriptions_attributes을 포함,하지만 난 얻을 Devise 컨트롤러의 경고.

class User < ActiveRecord::Base 
    devise :database_authenticatable, :registerable,:recoverable, :rememberable, :trackable, :validatable 
    validates_presence_of :first_name, :last_name 
    has_many :subscriptions 
    accepts_nested_attributes_for :subscriptions 
    attr_accessible :first_name, :last_name, :email, :password, :password_confirmation, :remember_me, :subscriptions_attributes  
    ... 
end 

-

class Subscription < ActiveRecord::Base 
    belongs_to :user 
    validates_presence_of :user_id, :chargify_subscription_id, :chargify_product_handle 
    attr_accessible :user_id, :chargify_subscription_id, :chargify_product_handle 
    ... 
end 

유증/등록/new.html.erb :

<%= form_for(resource, :as => resource_name, :url => registration_path(resource_name)) do |f| %> 
    <%= devise_error_messages! %> 
    <p><%= f.label :first_name %><br /> 
     <%= f.text_field :first_name %></p> 
    ... 

    <%= f.fields_for :subscription do |s| %> 
     <p><%= s.label :chargify_subscription_id %><br /> 
      <%= s.text_field :chargify_subscription_id %></p> 
      ... 

나는 다음과 같은 경고 받고 있어요 : 나는 '

Started POST "/users" for 127.0.0.1 at Sat May 14 12:38:49 -0700 2011 
    Processing by Devise::RegistrationsController#create as HTML 
    Parameters: {"commit"=>"Sign up", "authenticity_token"=>"wNZhZgIhYm9CpZfhvDiRBqaJseoO8QvR0Mk9VIybhcI=", "utf8"=>"✓", "user"=>{"password_confirmation"=>"[FILTERED]",  "last_name"=>"9", "subscription"=>{"chargify_product_handle"=>"medium", "chargify_subscription_id"=>"123"}, "password"=>"[FILTERED]", "first_name"=>"9", "email"=>"[email protected]  com"}} 
WARNING: Can't mass-assign protected attributes: subscription 

을 012에서 subscription_attributes (단수)을 사용해 보았습니다.하지만 작동하지 않습니다.

내가 잘못하고있는 것에 대한 제안 사항이 있으십니까? 감사합니다. .

+0

'attr_accessible : subscription' 설정을 시도 했습니까? – ecoologic

+0

@ecoologic -'Devise :: RegistrationsController # create'에'unknown attribute : subscription' 오류가 있습니다. 또한'attr_accessible : subscription'을 시도했지만 원래 오류가 발생했습니다. – stupakov

답변

5

사용자 및 구독 모델간에 has_many 연관이 있으므로 fields_for :subscription 대신 fields_for :subscriptions을 지정해야한다고 생각합니다. fields_for 범위 내에서

<%= f.fields_for :subscriptions do |s| %> 
    <p><%= s.label :chargify_subscription_id %><br /> 
     <%= s.text_field :chargify_subscription_id %></p> 
     ... 

속성은 다음 attr_accessible :subscriptions_attributes이 있기 때문에 일을해야 subscriptions_attributes 매개 변수를 사용하여 전달됩니다.

중첩 된 has_many 연결 양식의 예를 보려면 Rails documentation의 '중첩 된 특성 예제'섹션 (일대 다수)을 확인하십시오.

+0

예, 그렇다면'accept_nested_attributes_for : subscriptions'을 사용하면 컨트롤러에'@ subscriptions'를 저장하기 위해'@ user.save'를 검사 할 필요조차 없습니다! – ecoologic

+0

감사합니다. 원래'fields_for : subscriptions'은 구독 양식 필드가 렌더링되지 않기 때문에 잘못되었다고 생각했습니다. 그러나 그것은'구독 '이 Devise :: RegistrationsController에 의해 초기화되지 않았기 때문입니다. http://stackoverflow.com/questions/3546289/override-devise-registrations-controller/4527049#4527049에서 제안 된 것처럼 우리는보기에서 자원 크기를 구축 할 수 있습니다. 그러나 나는 그 컨트롤러에 속한 생각, 그리고 지금 나는 그것에 문제가 있어요 : http://stackoverflow.com/questions/6005932/nested-model-not-available-in-devise-views. – stupakov

관련 문제