使用protected_attributes gem导出4个质量分配错误

时间:2013-07-30 14:18:27

标签: ruby-on-rails ruby-on-rails-4

我正在尝试将用户配置文件子模块添加到用户模块,但遇到了一些问题。

路线:

resources :users do
    resources :userprofiles
end

userprofiles_controller.rb:

class UserprofilesController < ApplicationController
  def edit
    @user = current_user
    @user.UserProfile ||= UserProfile.new
    @userprofile = @user.UserProfile
  end

  def update
    @user = current_user
    @user.UserProfile ||= UserProfile.new
    @userprofile = @user.UserProfile
      if @userprofile.update_attributes(:userprofile => params[:userprofile])
        redirect_to @user
        flash[:notice] = "Changes saved."
      else
        render 'edit'
        flash[:notice] = "Error."
      end
  end
end

user_profile.rb:

class UserProfile < ActiveRecord::Base
  attr_accessible :first_name, :last_name, :summary
  belongs_to :user
end

错误:

Can't mass-assign protected attributes for UserProfile: userprofile

行:

if @userprofile.update_attributes(:userprofile => params[:userprofile])

修改

形式:

<%= form_for([@user, @userprofile], url: user_userprofile_path(@user, @userprofile)) do |form| %>


    <%= form.label :first_name %>
    <%= form.text_field :first_name %>

    <%= form.label :last_name %>
    <%= form.text_field :last_name %>


    <%=  form.label :summary %>
    <%=  form.text_area :summary %>

    <%= form.submit "Update", class: "btn btn-block btn-primary" %>

<% end %>

表:

  create_table "user_profiles", force: true do |t|
    t.string   "last_name"
    t.string   "first_name"
    t.text     "summary"
    t.integer  "user_id",    null: false
    t.datetime "created_at"
    t.datetime "updated_at"
  end

2 个答案:

答案 0 :(得分:1)

你只想要

@userprofile.update_attributes(params[:userprofile])

这是一个包含密钥:first_name:last_name:summary的哈希值,它们是允许的属性。当您尝试更新:userprofile => params[:userprofile]时,模型会检查是否允许键:userprofile - 而不是。

答案 1 :(得分:0)

我也有这个问题。问题是您的模型控制器中仍然存在attr_accessible。由于您不再需要它们,因此使用Rails 4删除它们,将强大的参数添加到控制器中,您就可以毫无问题地进行质量分配。