Ruby on rails Can';t在Rails控制器中分配属性

Ruby on rails Can';t在Rails控制器中分配属性,ruby-on-rails,ruby-on-rails-3,Ruby On Rails,Ruby On Rails 3,我的内裤扭了一下。我的目标是让任何登录的人都能够编辑指南。然后,“显示”操作将显示用户更新的和创建的。有点不对 指南\u controller.rb before_filter :authenticate_user!, only: [:new, :create, :edit, :update] def update @guideline = Guideline.find(params[:id]) respond_to do |format| if @guid

我的内裤扭了一下。我的目标是让任何登录的人都能够编辑指南。然后,“显示”操作将显示用户更新的和创建的。有点不对

指南\u 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(模型)

我似乎能够正确地分配更新的_。但是,当我进入admin并尝试更改指南用户时,我会得到错误:

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的问题吗?

答案就在错误消息中:

ActiveModel::MassAssignmentSecurity::错误(无法批量分配受保护的属性:副标题、slug):

如果要批量分配这些属性,需要将它们添加到模型中的
attr\u accessible
列表中


有关更多详细信息,请参阅。

答案就在错误消息中:

ActiveModel::MassAssignmentSecurity::错误(无法批量分配受保护的属性:副标题、slug):

如果要批量分配这些属性,需要将它们添加到模型中的
attr\u accessible
列表中


有关更多详细信息,请参阅。

将字幕和slug添加到属性可访问列表中


这将解决您的问题。

将副标题和slug添加到属性可访问列表中


这将解决您的问题。

立即有效的解决方案是将
副标题
slug
添加到
可访问属性
列表中

请记住,应用程序的用户将能够更新这些字段,即使表单中不包含这些字段,他也可以使用这些字段完美地创建查询

不在可访问属性列表中的字段必须单独分配,如下所示:

@guideline.subtitle = ...
@guideline.slug = ...

立即有效的解决方案是在
attr\u accessible
列表中添加
subtitle
slug

请记住,应用程序的用户将能够更新这些字段,即使表单中不包含这些字段,他也可以使用这些字段完美地创建查询

不在可访问属性列表中的字段必须单独分配,如下所示:

@guideline.subtitle = ...
@guideline.slug = ...

只需将副标题和slug放入
attr\u accessible
即可更改您的模型

guidelines.rb(模型)


注意:将任何字段放入
attr\u accessible
将允许任何用户批量分配您通过浏览器中的表单或代码添加的属性。因此,如果您这样做,请谨慎行事,记住您希望任何用户大量分配哪些字段,哪些字段不需要。

只需将副标题和slug放在
属性可访问的
中即可更改您的模型

guidelines.rb(模型)

注意:将任何字段放入
attr\u accessible
将允许任何用户批量分配您通过浏览器中的表单或代码添加的属性。因此,如果您这样做,那么请谨慎行事,记住您希望由任何用户大规模分配哪些字段,以及您不希望分配哪些字段

 attr_accessible :content, :hospital, :title, :user_id, :guideline_id, :specialty, :updated_by, :current_user, :subtitle, :slug