Rails 4嵌套表单,具有一对一关系

时间:2015-11-26 09:58:56

标签: ruby-on-rails-4

我有两个一对一关系的模型,用户和作者。

我有两个问题:作者实例没有保存,而user.name也没有保存(尽管其他属性也是如此)。我认为这是一个权限错误,因为日志说:

Unpermitted parameters: name, authors

我试图遵循这个:How to save form data to different models with one-to-one relationship in rails 3?

User.rb

has_one :author
accepts_nested_attributes_for :author

Author.rb

belongs_to :user

作者#新

 <%= simple_form_for @user do |f| %>
    <%= f.input :name %>
    <%= f.input :email %>
    <%= f.input :password %>
    <%= f.input :password_confirmation %>
      <%= f.simple_fields_for :author do |author_form| %>
        <%= author_form.input :bio %>
      <% end %>
    <%= f.submit %>
  <% end %>

Users_Controller

def user_params
  params.require(:user).permit(:name, :email, :image,
  author_attributes: [:id, :bio,])
end

2 个答案:

答案 0 :(得分:0)

用户控制器应如下所示: -

def new
    @user = User.new
    @user.build_author
end

def create
    @user = User.new(user_params)
    if @user.save
        redirect_to success_path
    else
        render :new
    end
end

private

def user_params
    params.require(:user).permit(:name, :email, :password, :password_confirmation, author_attributes: [:id, :bio])
end

用户#新

<%= simple_form_for @user do |f| %>
    <%= f.input :name %>
    <%= f.input :email %>
    <%= f.input :password %>
    <%= f.input :password_confirmation %>
    <%= f.simple_fields_for :author do |author_form| %>
        <%= author_form.input :bio %>
    <% end %>
    <%= f.submit %>
<% end %>

答案 1 :(得分:0)

我正在使用Devise gem并找到了将此代码添加到应用程序控制器的解决方案:

 before_action :configure_permitted_parameters, if: :devise_controller?

  def configure_permitted_parameters
    devise_parameter_sanitizer.for(:sign_up) { |u| u.permit(:name, :email, :password, author_attributes: [:id, :bio]) }
  end