小编gjb*_*gjb的帖子

Rails:around_*回调

我已经阅读了http://api.rubyonrails.org/classes/ActiveRecord/Callbacks.html上的文档,但是不知道何时around_*触发了关于before_*和的回调after_*.

任何帮助非常感谢.

谢谢.

ruby ruby-on-rails callback

89
推荐指数
2
解决办法
2万
查看次数

使用CookieStore进行Cookie与会话

在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中.

你什么时候选择使用一个而不是另一个?

谢谢.

cookies session ruby-on-rails ruby-on-rails-3

64
推荐指数
2
解决办法
2万
查看次数

Ruby:initialize()vs类体?

在Ruby中,将代码放在initialize()方法中而不是直接放在类体中有什么区别?两者似乎都是在打电话时执行的MyClass.new.

显然,initialize()可以接受参数,但这是唯一的区别吗?

class MyClass
  puts 'Hello'

  def initialize(params)
    puts 'World'
  end
end
Run Code Online (Sandbox Code Playgroud)

ruby

38
推荐指数
2
解决办法
2万
查看次数

使用Django 1.5实现多个用户类型

使用Django 1.5的新可配置用户模型功能实现多种用户类型的推荐方法是什么?

我想有两种用户类型:私人用户和交易用户,每个用户都有自己的必填字段集.

我可以通过两种方式来实现这一点:

1)多表继承

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)

将多表继承与可配置用户模型结合使用是否有任何问题?

2)使用具有"type"属性的单个模型

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中,如何过滤用户?

谢谢.

django django-models django-1.5

37
推荐指数
2
解决办法
9098
查看次数

AASM:来自任何州的过渡?

我正在使用AASM.是否有可能从任何州过渡?例如:

aasm_event :publish do
  transitions :to => :publish, :from => ANY_STATE
end
Run Code Online (Sandbox Code Playgroud)

我知道可以传递一系列状态:from,但这不是我所追求的.我试过:from完全省略了,但是没有用.

ruby ruby-on-rails aasm ruby-on-rails-3

29
推荐指数
2
解决办法
6099
查看次数

Rails:忽略传递给create()的不存在的属性

我有以下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()忽略模型中不存在的属性?或者,在创建新记录之前删除不存在的属性的最佳方法是什么?

非常感谢

ruby-on-rails ruby-on-rails-3

27
推荐指数
5
解决办法
1万
查看次数

Rails:Hash#to_param的对面

如果我将哈希转换为查询字符串,我该如何将其转换回来?

{: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哈希值时会自动执行此操作,但是可以直接调用此方法吗?

谢谢.

ruby ruby-on-rails ruby-on-rails-3

15
推荐指数
1
解决办法
5584
查看次数

Rails:模型实例方法还是辅助方法?

按照惯例,是否应将以下内容定义为我的模型或辅助方法的实例方法?

# 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)

非常感谢.

ruby ruby-on-rails ruby-on-rails-3 rails-activerecord

12
推荐指数
2
解决办法
3837
查看次数

Rails 3.1:具有命名路由的资产管道

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.

ruby-on-rails ruby-on-rails-3 asset-pipeline

12
推荐指数
1
解决办法
2115
查看次数

Rails:使用具有单表继承的Devise

我遇到了一个问题,就是让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

11
推荐指数
2
解决办法
8059
查看次数