2013-02-28 29 views
0

我已經得到了我的內褲。我的目標是登錄的任何人都可以編輯指南。 show動作將顯示updated_by和created_by用戶。有些事情是不對的。無法在Rails控制器中批量分配屬性

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(模型)

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這是一個問題用?

回答

1

即時的工作解決方案是將subtitleslug添加到attr_accessible列表中。

請記住,即使表單中不包含字段,您的應用的用戶也可以更新它們,但他可以完美地製作帶有字段的查詢。

場未在attr_accessible列表必須分別如下分配:

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

將子標題和slug添加到attr_accessible列表中。

這將解決您的問題。

1

通過將字幕和蛞蝓attr_accessible只要改變你的模型。

guidelines.rb(MODEL)

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

:把任何字段中attr_accessible將允許任何用戶質量分配所添加或者通過在瀏覽器中的形式或由一個代碼的屬性。所以,如果你這樣做,那麼請謹慎行事,記住你想要由任何用戶批​​量分配哪些字段,以及哪些字段不是。

相關問題