0

我正在创建一个论坛软件。我希望管理员和模组能够关闭某些主题。

对代码进行清理以仅显示相关信息。

楷模

class User < ActiveRecord::Base
  attr_accessible :name, :email, :password, :password_confirmation, :bio
  has_many :topics, dependent: :destroy
end

class Topic < ActiveRecord::Base
  belongs_to :user
  attr_accessible :name, :last_post_id, :content
end

用户模式:admin 和 mod 列确定管理员和 mods。

create_table "users", :force => true do |t|
  t.string   "name"
  t.string   "email"
  t.datetime "created_at",                         :null => false
  t.datetime "updated_at",                         :null => false
  t.string   "password_digest"
  t.string   "remember_token"
  t.boolean  "admin",           :default => false
  t.text     "bio"
  t.boolean  "mod",             :default => false
end

主题模式:关闭列确定主题的关闭状态。

create_table "topics", :force => true do |t|
  t.datetime "created_at",                      :null => false
  t.datetime "updated_at",                      :null => false
  t.integer  "forum_id"
  t.string   "name"
  t.integer  "last_post_id"
  t.integer  "views"
  t.integer  "user_id"
  t.boolean  "closed",       :default => false
  t.text     "content"
end

我不愿意用户attr_accessible :closed使用 TOPIC 模型,因为它容易受到恶意 PUT 请求的攻击(如果我错了,请纠正我)。

Rails 应用程序有什么方法可以在closed不使用的情况下访问和修改 TOPIC 列的值attr_accessible,以便只有 mods 和管理员可以编辑它们?

4

1 回答 1

1

I searched on google and found this ascii cast.

Basically, you are looking for dynamic attr_accessible.

If you currently have

class Article < ActiveRecord::Base  
  attr_accessible :name, :content, :closed  
end  

You ca use dynamic attr_accessible like this :

class Article < ActiveRecord::Base  
  attr_accessible :name, :content  
  private  
  def mass_assignment_authorizer  
    super + [:closed]  
  end  
end  

I hope I is what you are looking for. Be sure to check the link I gave you for complete reference.

于 2012-07-02T03:48:38.163 回答