我有一个Rails应用程序是一个博客平台,允许多个贡献作者.我的用户模型有一个:writer布尔属性,用于分配写入权限.然而,:作家是不是下面列出attr_accessible的用户模型.
我想通过网络编辑这个属性,而不必运行
User.find_by_id(user_id).update_attribute(:writer, true/false)
Run Code Online (Sandbox Code Playgroud)
通过控制台,但我不知道这是否会不列是不可能的:作家下attr_accessible的用户模型.我有几个页面只能访问管理员用户,我希望能够在这些视图中切换:writer属性.
如果确实有可能,怎么办呢?在此先感谢您的帮助!
编辑:基于我得到的几个答案,我觉得应该在我的问题中更具体.我道歉.据我所知,我仍然可以单独更新:writer属性,正如Beerlington和Hitesh指出的那样.我想知道的是如何通过视图实现这样的功能.是否可以创建一个可点击的链接来切换:writer状态?或许才有可能有一个链接调用一个控制器功能,并通过适当的user_id为:作家切换?
有没有办法让Devise与Rails 4.0rc1一起使用?尝试启动rails服务器甚至生成Devise视图时出现以下错误:
/Users/scott/.rvm/gems/ruby-2.0.0-p195@rails/gems/activemodel-4.0.0.rc1/lib/active_model/deprecated_mass_assignment_security.rb:14:in `attr_accessible':
`attr_accessible` is extracted out of Rails into a gem. Please use new recommended protection model for params(strong_parameters) or add `protected_attributes` to your Gemfile to use old one. (RuntimeError)
Run Code Online (Sandbox Code Playgroud) ruby-on-rails attr-accessible devise activemodel ruby-on-rails-4
我正在使用Devise 3的候选版本,以便我可以将它与Rails 4一起使用.在Rails 3.2中我曾经能够User通过简单地将该字段添加到registration/edit.html.erb 来为我的模型添加自定义字段和registration/new.html.erb文件(运行正确的迁移后).然后我只是将该字段添加到attr_accessible模型中的字段列表中.
但是,在Rails 4中,没有attr_accessible列表,我不能简单地在视图中添加字段.如何添加自定义用户字段?
ruby-on-rails attr-accessible devise strong-parameters ruby-on-rails-4
当我向我的Relationship模型添加attr_accessible时发生了这种情况.
class Relationship < ActiveRecord::Base
attr_accessible :followed_id
end
Run Code Online (Sandbox Code Playgroud)
不使用Devise或protected_attributes gem,这有什么办法?我知道在控制器中你调用一个需要和允许字段的私有方法.这也是你应该在模型中做的事吗?这里的约定是什么?
谢谢!
ruby-on-rails whitelist mass-assignment attr-accessible devise
我正在使用Ruby on Rails v3.2.2并且我想处理一个符号数组,以便将其值传递给attr_accessible方法以及它应该被创建.也就是说,我有:
attr_array = [:one, :two, ...]
Run Code Online (Sandbox Code Playgroud)
如果我使用:
attr_accessible attr_array
Run Code Online (Sandbox Code Playgroud)
我得到以下内容:
self.accessible_attributes.inspect
# => #<ActiveModel::MassAssignmentSecurity::WhiteList: {"[:one, :two, ..."]}>
Run Code Online (Sandbox Code Playgroud)
但是,我想得到:
# => #<ActiveModel::MassAssignmentSecurity::WhiteList: {"one", "two", "..."}>
Run Code Online (Sandbox Code Playgroud)
以及应该做的.
我该怎么做?
我正在使用rails3 edge和mongoid 2beta6和ruby 1.9.2-head.
如何手动更改表名,就像ActiveRecord的set_table_name一样?例如,我的模型注册应该使用表"users"进行存储,而不是"注册".
另一个问题是如何实现AR提供的attr_accessible bevahior?
谢谢,科林
ruby-on-rails tablename attr-accessible mongoid ruby-on-rails-3
我正在使用Rails中的'protected_attributes'gem,它将Rails明确attr_accessible地带回到Rails 4(我需要与另一个Gem兼容,长篇故事).
在编写代码的过程中,我尝试访问未命名为access的属性.我收到以下错误:
NoMethodError (undefined method `id' for #<ActiveRecord::Relation::ActiveRecord_Relation_User:0x00000104c51c00>):
Run Code Online (Sandbox Code Playgroud)
实现我的错误,我添加:id了我的attr_accessible列表的其余部分.但是,即使重新启动rails服务器,每次运行代码时仍然会得到相同的错误.这件事发生在我之前,我所做的是rake db:reset无论出于什么原因修复了我的问题(但是在这个过程中我的数据库已经完成了).我宁愿不再擦除我的数据库...有没有更简单的方法来解决这个问题?有些缓存我不清算什么?谢谢.
编辑:对于那些感兴趣的人,这是完整的痕迹:
activerecord (4.0.0) lib/active_record/relation/delegation.rb:121:in `method_missing'
activerecord (4.0.0) lib/active_record/relation/delegation.rb:68:in `method_missing'
app/controllers/api/v1/superusers.rb:17:in `block (2 levels) in <class:Users>'
grape (0.7.0) lib/grape/endpoint.rb:31:in `call'
grape (0.7.0) lib/grape/endpoint.rb:31:in `block in generate_api_method'
grape (0.7.0) lib/grape/endpoint.rb:407:in `call'
grape (0.7.0) lib/grape/endpoint.rb:407:in `run'
grape (0.7.0) lib/grape/endpoint.rb:156:in `block in call!'
grape (0.7.0) lib/grape/middleware/base.rb:24:in `call'
grape (0.7.0) lib/grape/middleware/base.rb:24:in `call!'
grape (0.7.0) lib/grape/middleware/base.rb:18:in `call'
grape (0.7.0) lib/grape/middleware/base.rb:24:in `call!'
grape (0.7.0) lib/grape/middleware/base.rb:18:in `call'
grape (0.7.0) …Run Code Online (Sandbox Code Playgroud) 我想将一个虚拟属性添加到activerecord对象.定义getter/setter很简单,但我希望我的属性出现在属性hash(和attribute_names等)中.由于这是rails 4我不能使用attr_accessible.
我还需要添加到此代码中,以便我可以调用reference.attributes并让作者的值显示在那里?
class Reference < ActiveRecord::Base
def authors
self.author_names.to_a.join(' and ')
end
def authors=(val)
self.author_names.destroy
val.strip.split(/(?:[ ]and[ ])|\;/).each {|entry|
self.author_names << AuthorName.new(name: entry)
}
end
end
Run Code Online (Sandbox Code Playgroud) devise ×3
ruby ×3
activerecord ×2
activemodel ×1
arrays ×1
mongoid ×1
tablename ×1
whitelist ×1