我已经阅读了http://api.rubyonrails.org/classes/ActiveRecord/Callbacks.html上的文档,但是不知道何时around_*触发了关于before_*和的回调after_*.
任何帮助非常感谢.
谢谢.
在Rails 3中,将数据存储在cookie中并在会话中存储数据之间有什么区别,会话存储设置为默认的CookieStore?
例如
cookie[:foo] = 'bar'
# MyApp::Application.config.session_store :cookie_store, key: '_myapp_session'
session[:foo] = 'bar'
Run Code Online (Sandbox Code Playgroud)
据我所知,两者最终都存储在客户端cookie中.
你什么时候选择使用一个而不是另一个?
谢谢.
在Ruby中,将代码放在initialize()方法中而不是直接放在类体中有什么区别?两者似乎都是在打电话时执行的MyClass.new.
显然,initialize()可以接受参数,但这是唯一的区别吗?
class MyClass
puts 'Hello'
def initialize(params)
puts 'World'
end
end
Run Code Online (Sandbox Code Playgroud) 使用Django 1.5的新可配置用户模型功能实现多种用户类型的推荐方法是什么?
我想有两种用户类型:私人用户和交易用户,每个用户都有自己的必填字段集.
我可以通过两种方式来实现这一点:
class BaseUser(AbstractBaseUser):
email = models.EmailField(max_length=254, unique=True)
# ...
class PrivateUser(BaseUser):
first_name = models.CharField(max_length=30)
last_name = models.CharField(max_length=30)
# ...
class TradeUser(BaseUser):
company_name = models.CharField(max_length=100)
# ...
Run Code Online (Sandbox Code Playgroud)
将多表继承与可配置用户模型结合使用是否有任何问题?
class User(AbstractBaseUser):
email = models.EmailField(max_length=254, unique=True)
user_type = models.CharField(max_length=30, choices={
'P': 'Private',
'T': 'Trade',
})
first_name = models.CharField(max_length=30, blank=True)
last_name = models.CharField(max_length=30, blank=True)
company_name = models.CharField(max_length=100, blank=True)
# ...
Run Code Online (Sandbox Code Playgroud)
此方法需要一些依赖于条件验证user_type.
哪种方法最适合我的用例?或许有更好的方法来实现这一目标?
此外,在案例编号1中,如何过滤用户?
谢谢.
我正在使用AASM.是否有可能从任何州过渡?例如:
aasm_event :publish do
transitions :to => :publish, :from => ANY_STATE
end
Run Code Online (Sandbox Code Playgroud)
我知道可以传递一系列状态:from,但这不是我所追求的.我试过:from完全省略了,但是没有用.
我有以下Rails模型:
class CreateFoo < ActiveRecord::Migration
def self.up
create_table :foo do |t|
t.string :a
t.string :b
t.string :c
t.timestamps
end
end
def self.down
drop_table :foo
end
end
Run Code Online (Sandbox Code Playgroud)
如果我尝试使用其他不存在的属性创建新记录,则会产生错误:
Foo.create(a: 'some', b: 'string', c: 'foo', d: 'bar')
ActiveRecord::UnknownAttributeError: unknown attribute: d
Run Code Online (Sandbox Code Playgroud)
有没有办法让create()忽略模型中不存在的属性?或者,在创建新记录之前删除不存在的属性的最佳方法是什么?
非常感谢
如果我将哈希转换为查询字符串,我该如何将其转换回来?
{:filters => {:colour => ['Red', 'Blue'], :size => 'Medium'}}.to_param
=> "filters[colour][]=Red&filters[colour][]=Blue&filters[size]=Medium"
Run Code Online (Sandbox Code Playgroud)
Rails在填充params哈希值时会自动执行此操作,但是可以直接调用此方法吗?
谢谢.
按照惯例,是否应将以下内容定义为我的模型或辅助方法的实例方法?
# app/models/user.rb
class User < ActiveRecord::Base
def full_name
"#{first_name} #{last_name}"
end
end
Run Code Online (Sandbox Code Playgroud)
要么
# app/helpers/users_helper.rb
module UsersHelper
def full_name
"#{@user.first_name} #{@user.last_name}"
end
end
Run Code Online (Sandbox Code Playgroud)
非常感谢.
Rails 3.1.0.rc5
我在命令路由在启用ERB的Javascript文件中工作时遇到问题:
# app/assets/javascripts/items.js.erb
$('#start').click(function() {
$.ajax({
url : '<%= ajax_items_path %>',
success : function(result) {
$('#result').html(result);
}
});
});
Run Code Online (Sandbox Code Playgroud)
错误消息如下:
Error compiling asset items.js:
NameError: undefined local variable or method `ajax_items_path' for #<#<Class:0x007fbcb49a7630>:0x007fbcb4ee30b8>
(in myproject/app/assets/javascripts/items.js.erb)
Run Code Online (Sandbox Code Playgroud)
ajax_items_path如果我直接在视图中使用它,该路径工作正常.
看起来资产管道中没有命名路由.如果是这种情况,那么解决方法是什么?我真的想避免在我的Javascript中硬编码URL.
我遇到了一个问题,就是让Devise按照单表继承的方式工作.
我有两种不同类型的帐户,如下所示:
class Account < ActiveRecord::Base
devise :database_authenticatable, :registerable
end
class User < Account
end
class Company < Account
end
Run Code Online (Sandbox Code Playgroud)
我有以下路线:
devise_for :account, :user, :company
Run Code Online (Sandbox Code Playgroud)
用户注册/user/sign_up和公司注册/company/sign_up.所有用户都使用单个表单登录/account/sign_in(Account是父类).
但是,通过此表单登录似乎只是为Account范围验证它们.后续请求执行诸如/user/edit或/company/edit将用户指向相应范围的登录屏幕.
如何让Devise识别帐户"类型"并对相关范围进行身份验证?
任何建议非常感谢.
ruby-on-rails single-table-inheritance devise ruby-on-rails-3