我正在尝试将用户配置文件子模块添加到用户模块,但遇到了一些问题。
路线:
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
答案 0 :(得分:1)
你只想要
@userprofile.update_attributes(params[:userprofile])
这是一个包含密钥:first_name
,:last_name
和:summary
的哈希值,它们是允许的属性。当您尝试更新:userprofile => params[:userprofile]
时,模型会检查是否允许键:userprofile
- 而不是。
答案 1 :(得分:0)
我也有这个问题。问题是您的模型控制器中仍然存在attr_accessible。由于您不再需要它们,因此使用Rails 4删除它们,将强大的参数添加到控制器中,您就可以毫无问题地进行质量分配。