ruby-on-rails – 在Rails应用程序中的AssociationTypeMismatch(
我收到了一个AssociationTypeMismatch错误,我不确定我在哪里弄错了.我对Rails很陌生,所以我猜我犯了一些愚蠢的错误.我检查了我的语法并将其与
AssociationTypeMismatch Error on Ruby on Rails app进行了比较
…但我仍然无法捕捉错误. 这是我的模特 class User < ActiveRecord::Base attr_accessible :email,:full_name,:password,:password_confirmation,:preference has_secure_password validates_uniqueness_of :email validates_presence_of :full_name has_one :preference,:dependent => :destroy accepts_nested_attributes_for :preference end class Preference < ActiveRecord::Base attr_accessible :background_fill,:background_position,:layout belongs_to :user end 这是我的控制器: def new @user = User.new @user.build_preference end def create @user = User.new(params[:user]) if @user.save session[:user_id] = @user.id redirect_to root_url,notice: "Thanks for signing up!" else render "new" end end 这是我的观点: <%= form_for @user do |f| %> <% if @user.errors.any? %> <div class="error_messages"> <h2>There's an error!</h2> <ul> <% @user.errors.full_message.each do |message| %> <li><%= message %></li> <% end %> </ul> </div> <% end %> <%= f.label :full_name %> <%= f.text_field :full_name,:class => "target",:placeholder => "Your full name",:maxlength => "55",:autofocus => "autofocus" %> <%= f.label :email %> <%= f.email_field :email,:placeholder => "example@gmail.com",:maxlength => "55" %> <%= f.label :password %> <%= f.password_field :password,:placeholder => "Enter a password",:maxlength => "55" %> <%= f.label :password_confirmation,"Confirmation" %> <%= f.password_field :password_confirmation,:placeholder => "Enter your password again",:maxlength => "55" %> <%= f.fields_for :preference do |builder| %> <%= builder.hidden_field :layout,value: params[:layout] %> <%= builder.hidden_field :background_fill,value: params[:background_fill] %> <%= builder.hidden_field :background_position,value: params[:background_position] %> <% end %> <%= f.submit "Create an Account",:class => "button cta" %> <% end %> 和我的参数 {"utf8"=>"?","authenticity_token"=>"[redacted]=","user"=>{"full_name"=>"test","email"=>"test@example.com","password"=>"[FILTERED]","password_confirmation"=>"[FILTERED]","preference"=>{"layout"=>"layout-3","background_fill"=>"restaurant-2","background_position"=>"position-center"}},"commit"=>"Create an Account"} 编辑: 我需要创建一个def preferences_attributes =吗? 更新 我尝试在构建首选项上面添加@ user.preference = Preference.new并将f.field_for:preference更改为f.field_for @ user.preference,但我仍然遇到相同的错误. 更新2 解决方法
它是:
attr_accessible :preference_attributes 并以您的形式: <%= f.fields_for :preference_attributes do |builder| %> ... (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |