我的裤子扭曲了。我的目标是让所有登录的人都可以编辑指南。然后,show动作将显示updated_by和created_by用户。有些事情不对。
guidelines_controller.rb
before_filter :authenticate_user!, only: [:new, :create, :edit, :update]
def update
@guideline = Guideline.find(params[:id])
respond_to do |format|
if @guideline.update_attributes(params[:guideline])
@guideline.update_attribute(:updated_by, current_user.id)
def show
@guideline = Guideline.find(params[:id])
if @guideline.updated_by
@updated = User.find(@guideline.updated_by).profile_name
end
if User.find(@guideline.user_id)
@created = User.find(@guideline.user_id).profile_name
end
guidelines.rb(MODEL)
attr_accessible :content, :hospital, :title, :user_id, :guideline_id, :specialty, :updated_by, :current_user
belongs_to :user
has_many :favourite_guidelines
我似乎能够正确分配updated_by。但当我进入管理员并尝试更改指南用户时,我收到错误:
Processing by Admin::GuidelinesController#update as HTML
Parameters: {"utf8"=>"✓", "authenticity_token"=>"x+2BC0ztrqLBasL5uWskDEdars+FvSSNRvzGJuXyiA0=", "guideline"=>{"user_id"=>"13", "title"=>"URL testing", "content"=>"http://www.healme.com", "hospital"=>"Children's Hospital", "subtitle"=>"", "specialty"=>"Cardiology", "slug"=>"", "updated_by"=>""}, "commit"=>"Update Guideline", "id"=>"37-url-testing"}
AdminUser Load (0.4ms) SELECT "admin_users".* FROM "admin_users" WHERE "admin_users"."id" = 1 LIMIT 1
Guideline Load (0.2ms) SELECT "guidelines".* FROM "guidelines" WHERE "guidelines"."id" = ? LIMIT 1 [["id", "37-url-testing"]]
Completed 500 Internal Server Error in 9ms
ActiveModel::MassAssignmentSecurity::Error (Can't mass-assign protected attributes: subtitle, slug):
这是before_filter的问题吗?
答案 0 :(得分:1)
答案就在错误信息中:
ActiveModel::MassAssignmentSecurity::Error (Can't mass-assign protected attributes: subtitle, slug):
如果您想要批量分配这些属性,则需要将它们添加到模型中的attr_accessible
列表中。
有关详细信息,请参阅http://guides.rubyonrails.org/security.html#mass-assignment。
答案 1 :(得分:1)
将字幕和slug添加到attr_accessible列表。
这将解决您的问题。
答案 2 :(得分:1)
直接工作的解决方案是将subtitle
和slug
添加到attr_accessible
列表。
请记住,即使表单中没有包含字段,您的应用用户也可以更新它们,他可以完美地使用字段制作查询。
不在attr_accessible
列表中的字段必须单独分配,如下所示:
@guideline.subtitle = ...
@guideline.slug = ...
答案 3 :(得分:1)
只需在attr_accessible
中添加字幕和slug 即可更改模型。
guidelines.rb(MODEL)
attr_accessible :content, :hospital, :title, :user_id, :guideline_id, :specialty, :updated_by, :current_user, :subtitle, :slug
注意:在attr_accessible
中放置任何字段将允许任何用户批量指定您在表单中通过浏览器或代码添加的属性。因此,如果您这样做,请谨慎行事,记住您希望由任何用户批量分配哪些字段以及您不使用哪些字段。