attr_accessible 似乎不再适用于我的模型.
在Rails 4中允许批量分配的方法是什么?
我正在使用Ruby on Rails 3.2.2,我想知道以下是否是一个"正确"/"正确"/"确定"的方式来覆盖我的类属性的setter方法.
attr_accessible :attribute_name
def attribute_name=(value)
... # Some custom operation.
self[:attribute_name] = value
end
Run Code Online (Sandbox Code Playgroud)
上面的代码似乎按预期工作.但是,我想知道,通过使用上面的代码,将来我会遇到问题,或者至少,我应该在Ruby on Rails上遇到"我应该期待"/"可能发生"的问题.如果这不是覆盖setter方法的正确方法,那么正确的方法是什么?
注意:如果我使用代码
attr_accessible :attribute_name
def attribute_name=(value)
... # Some custom operation.
self.attribute_name = value
end
Run Code Online (Sandbox Code Playgroud)
我收到以下错误:
SystemStackError (stack level too deep):
actionpack (3.2.2) lib/action_dispatch/middleware/reloader.rb:70
Run Code Online (Sandbox Code Playgroud) 我有一个与名为'Order'的模型相关联的现有表单,但我想添加新的表单字段,以捕获要在第三方支付网关上处理的信用卡信息,如名称,cc号码等.
但由于我不想在我们的数据库中保存CC信息,因此我的订单表中没有相应的列.在提交表单时,这会给我一个错误,即那些信用卡输入字段不是订单模型的"部分".
attr_accessible(*attributes)和attr_protected(*attributes)?有什么区别?例子很好.
我看到很多开发人员在他们的模型中使用它们 我搜索了差异,但我不确切地知道它们是什么.在不同情况下,重要性及其必要性是什么?
我有一个简短的问题.是否可以保存文件而不通过表单实际上传?
例如,假设我正在查看电子邮件中的附件,我想使用回形针保存它们.我该怎么做呢?我是否需要在某处手动调用save_file(或类似的东西)?
任何帮助将非常感激!
我正在关注Michael Hartl的RoR教程,它涵盖了密码加密的基础知识.这是目前的用户模型:
class User < ActiveRecord::Base
attr_accessor :password
attr_accessible :name, :email,: password, :password_confirmation
email_regex = /^[A-Za-z0-9._+-]+@[A-Za-z0-9._-]+\.[A-Za-z0-9._-]+[A-Za-z]$/
#tests for valid email addresses.
validates :name, :presence => true,
:length => {:maximum => 50}
validates :email, :presence => true,
:format => {:with => email_regex},
:uniqueness => {:case_sensitive => false}
validates :password, :presence => true,
:length => {:maximum => 20, :minimum => 6},
:confirmation => true
before_save :encrypt_password
private
def encrypt_password
self.encrypted_password = encrypt(password)
end
def encrypt(string)
string
end
end
Run Code Online (Sandbox Code Playgroud)
我发布了一个关于before_save不工作的上一个问题,事实证明我不小心做的是将我的encrypt_password写成:
def …Run Code Online (Sandbox Code Playgroud) 我是RoR的新手并且坚持这个设计问题.我想允许用户使用电子邮件或用户名登录(使用用户名注册已经可以).
class ApplicationController < ActionController::Base
protect_from_forgery with: :exception
before_filter :configure_permitted_parameters, if: :devise_controller?
protected
def configure_permitted_parameters
devise_parameter_sanitizer.for(:sign_up) { |u| u.permit(:username, :email, :password) }
devise_parameter_sanitizer.for(:sign_in) { |u| u.permit(:login, :password, :remember_me) }
end
end
Run Code Online (Sandbox Code Playgroud)
class User < ActiveRecord::Base
devise :database_authenticatable, :registerable, :recoverable, :rememberable, :trackable, :validatable, :authentication_keys => [:login]
validates_uniqueness_of :username
validates_presence_of :username
validates :username, length: { in: 4..20 }
def self.find_first_by_auth_conditions(warden_conditions)
conditions = warden_conditions.dup
if login = conditions.delete(:login)
where(conditions).where(["lower(username) = :value OR lower(email) = :value", { …Run Code Online (Sandbox Code Playgroud) 我刚才已经做了一点阅读attr_accessor,attr_accessible和强大的参数在几个不同的位置:
attr_accessor和attr_accessible之间的区别
如何在Rails 4中使用attr_accessible?
http://edgeapi.rubyonrails.org/classes/ActionController/StrongParameters.html
而我正在考虑大规模任务:
http://code.tutsplus.com/tutorials/mass-assignment-rails-and-you--net-31695
我无法理解attr_accessible与强参数之间的区别.我对上述主题的理解并不是100%自信所以我可能会错过一些简单但我知道他们做类似的工作.
但是,attr_accessible强参数有什么区别?它们只是同一个东西的不同名称吗?我们为什么要从一个移到另一个?
任何信息表示赞赏.
我的用户模型has_many响应.我正在尝试创建一个嵌套表单来创建一个具有三个子响应的新用户.我的代码看起来与Rails强制转换相同,但是虽然它会保存用户,但它不会保存它们的响应.任何人都可以看到有什么问题?
users_controller.rb
class UsersController < ApplicationController
def new
@user = User.new
3.times{@user.responses.build}
@responses = @user.responses
end
def create
@user = User.new(user_params)
if @user.save
redirect_to @user #todo: where do we want to redirect?
else
render 'new'
end
end
def show
@user = User.find(params[:id])
@responses = @user.responses
end
def index
@users = User.all
end
private
def user_params
params.require(:user).permit(:username, :email, :responses)
end
end
Run Code Online (Sandbox Code Playgroud)
user.rb
class User < ActiveRecord::Base
attr_accessor :responses_attributes
has_many :responses, :dependent => :destroy
accepts_nested_attributes_for :responses#, :reject_if => lambda { |a| a[:content].blank? …Run Code Online (Sandbox Code Playgroud) 我刚才有一个关于Ruby on Rails和模型中的attr_accessible属性的一般性问题(Rails 3).有人可以解释那里应该定义哪些模型属性?我记得关于大规模任务的风险,虽然我在这方面不太了解...谢谢:)
我有一个用户模型=> @user
我想添加新属性current_time以@user供临时使用.
不想进行迁移以添加列(仅供临时使用):
@user.current_time = Time.now
Run Code Online (Sandbox Code Playgroud)
有没有办法实现这个目标?
NoMethodError (undefined method `current_time=' for #<User:0x007fd6991e1050>):
app/controllers/carts_controller.rb:47:in `block in search_user'
app/controllers/carts_controller.rb:45:in `search_user'
Run Code Online (Sandbox Code Playgroud) 这是我正在使用的结构:
应用程序/模型/ model.rb
class Model < ActiveRecord::Base
attr_accessor :some_var
end
Run Code Online (Sandbox Code Playgroud)
应用程序/模型/ model_controller.rb
class ModelsController < ApplicationController
def show
@model = Model.find(params[:id])
@other_var
if @model.some_var.nil?
@model.some_var = "some value"
@other_var = "some value"
else
@other_var = @model.some_var
end
end
end
Run Code Online (Sandbox Code Playgroud)
每当我运行此代码(例如show方法)时,if子句被评估为true(例如@ model.some_var == nil).我该如何解决这个问题?我对attr_accessor的工作方式有什么不妥吗?
我遇到了一个错误:我正在开发一个带有Facebook集成的网络..我是ruby on rails的新手.你能解决我的问题吗?
ActiveModel::MassAssignmentSecurity::Error in SessionsController#create
Can't mass-assign protected attributes: name
Run Code Online (Sandbox Code Playgroud)
这是我的控制器:
class SessionsController < ApplicationController
def create
#render :json => request.env['omniauth.auth'].to_yaml
auth = request.env['omniauth.auth']
unless @auth = Authorization.find_from_hash(auth)
@auth = Authorization.create_from_hash(auth, current_user)
end
self.current_user = @auth.user
render :text => "Welcome, #{current_user.name}."
end
end
Run Code Online (Sandbox Code Playgroud)
这是我的用户模型:
class User < ActiveRecord::Base
has_many :authorizations
attr_accessor :name, :uid, :provider
def self.create_from_hash!(hash)
#create(:name => hash['user_info']['name'])
create(:name => hash.info.name)
end
end
Run Code Online (Sandbox Code Playgroud)
这是我的授权模式:
class Authorization < ActiveRecord::Base
belongs_to :user
validates_presence_of :user_id, :uid, :provider
validates_uniqueness_of :uid, :scope => …Run Code Online (Sandbox Code Playgroud) ruby-on-rails ×10
ruby ×4
activerecord ×1
devise ×1
has-many ×1
model ×1
nested-forms ×1
omniauth ×1
overriding ×1
paperclip ×1
self ×1
setter ×1
simple-form ×1