0

私はひねりを加えた私のニッカーを持っています。私の目的は、ログインしている人なら誰でもガイドラインを編集できるようにすることです。次に、showアクションはupdated_byおよびcreated_byユーザーを表示します。何かが正しくありません。

ガイドライン_コントローラー.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

ガイドライン.rb(モデル)

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

 belongs_to :user
 has_many :favourite_guidelines

update_byを正しく割り当てることができるようです。しかし、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):

これはbybefore_filterの問題ですか?

4

4 に答える 4

1

答えはエラーメッセージにあります。

ActiveModel::MassAssignmentSecurity::Error (Can't mass-assign protected attributes: subtitle, slug):

attr_accessibleこれらの属性を一括割り当てする場合は、モデルのリストに追加する必要があります。

詳細については、http: //guides.rubyonrails.org/security.html#mass-assignmentを参照してください。

于 2013-02-28T08:30:46.177 に答える
1

attr_accessibleリストに字幕とスラッグを追加します。

これはあなたの問題を解決します。

于 2013-02-28T08:30:47.040 に答える
1

すぐに機能する解決策は、リストにsubtitleとを追加することです。slugattr_accessible

アプリのユーザーは、フォームにフィールドが含まれていなくても更新できるため、フィールドを使用してクエリを完全に作成できることに注意してください。

リストにないフィールドは、attr_accessible次のように個別に割り当てる必要があります。

@guideline.subtitle = ...
@guideline.slug = ...
于 2013-02-28T08:30:49.793 に答える
1

字幕とスラッグをに入れてモデルを変更するだけattr_accessibleです。

ガイドライン.rb(モデル)

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

:任意のフィールドをattr_accessible入力すると、ブラウザのフォームまたはコードのいずれかによって追加した属性をすべてのユーザーが一括で割り当てることができます。したがって、そうする場合は、ユーザーが一括で割り当てたいフィールドとそうでないフィールドを念頭に置いて慎重に行ってください。

于 2013-02-28T08:31:52.730 に答える