小编Jar*_*red的帖子

FactoryGirl build_stubbed策略与has_many关联

给定两个对象之间的标准has_many关系.举个简单的例子,我们来看看:

class Order < ActiveRecord::Base
  has_many :line_items
end

class LineItem < ActiveRecord::Base
  belongs_to :order
end
Run Code Online (Sandbox Code Playgroud)

我想要做的是生成带有存根行项目列表的存根订单.

FactoryGirl.define do
  factory :line_item do
    name 'An Item'
    quantity 1
  end
end

FactoryGirl.define do
  factory :order do
    ignore do
      line_items_count 1
    end

    after(:stub) do |order, evaluator|
      order.line_items = build_stubbed_list(:line_item, evaluator.line_items_count, :order => order)
    end
  end
end
Run Code Online (Sandbox Code Playgroud)

上面的代码不起作用,因为Rails想要在分配line_items时调用order并且FactoryGirl引发异常: RuntimeError: stubbed models are not allowed to access the database

那么你如何(或者可能)生成一个存根对象,其中has_may集合也是存根的?

ruby-on-rails factory-bot

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

将api密钥添加到ActiveResource中的每个请求

我有2个RESTful Rails应用程序,我正试图互相交谈.两者都是用Rails 3编写的(目前是beta3).对服务的请求将需要使用api密钥,这只是每个请求都需要的参数.我似乎无法找到有关如何执行此操作的任何信息.

您可以通过site =方法定义资源连接到的URL.应该有一个等效的query_params =方法或类似的方法.

我找到了一篇与此相关的好博客文章,它是从2008年10月开始的,因此对Rails 3来说并不完全有用.

更新:我有一个想法.小型机架中间件或金属是否可以解决这个问题?它可以直接通过请求,将其添加到api_key上.

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

20
推荐指数
2
解决办法
9713
查看次数

在Rails应用程序中运行rake任务后,将显示正在加载的消息和测试结果

运行一些rake任务后会出现以下输出:

Loaded suite /usr/bin/rake
Started

Finished in 0.00042 seconds.

0 tests, 0 assertions, 0 failures, 0 errors
Run Code Online (Sandbox Code Playgroud)

对于与测试无关的任务,此输出无用或不必要.我想阻止它出现.我认为它源于需要某个文件或包含某个模块.

更新:看起来我错了,这确实在Rails内置的一些任务中出现.这是装载的灯具的输出--trace.

$ rake db:fixtures:load --trace

** Invoke db:fixtures:load (first_time)
** Invoke environment (first_time)
** Execute environment
** Execute db:fixtures:load
Loaded suite /usr/bin/rake
Started

Finished in 0.000255 seconds.

0 tests, 0 assertions, 0 failures, 0 errors
Run Code Online (Sandbox Code Playgroud)

rake ruby-on-rails

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

使用Restful Authentication进行无意中的会话劫持问题

我正在使用github上找到的当前版本的restful_authentication,我遇到了一堆奇怪的会话问题.服务器似乎以某种方式将会话分配给不应该的用户.只有在越过已登出/登录的障碍时才会发生这种情况.

这是一个例子.随着服务器上的活动没有会话,我登录到与用户A在另一台计算机的帐户,我注销用户B的时候,注销重定向发生后的某个时间,我将被记录在与用户B登录然后用户A.从这一点开始,我可以继续浏览网站,就像我以该用户身份登录一样!我通过日志观察到的一点是,当发生这种劫持时,会话ID不一样.用户A在两个会话中都已登录,但会话ID完全不同.这只是可能发生的一个例子.我无法可靠地重现这个问题,因为它似乎是随机的.

它似乎不是环境或运行的服务器的症状.我可以使用杂种和乘客重现这个问题.我也在开发和生产中看到过它.我在这个应用程序中使用基于数据库的会话,它在Rails 2.1.1上运行.我在调用生成器时应用了有状态选项.否则,不会对会话的处理方式进行其他修改.

更新此处是直接来自restful_authentication的有问题的方法.

# Accesses the current user from the session.
# Future calls avoid the database because nil is not equal to false.
def current_user
  @current_user ||= (login_from_session || login_from_basic_auth || login_from_cookie) unless @current_user == false
end
Run Code Online (Sandbox Code Playgroud)

ruby rest ruby-on-rails restful-authentication

10
推荐指数
1
解决办法
1238
查看次数

让Rails 2.3.x忽略i18n gem

我有一个Rails 2.3.5项目,它使用Rails的本地化功能.我也碰巧安装了Rails 3 beta(这取决于i18n gem).Rails 2.3.5很乐意自己处理本地化(没有安装i18n),但是如果i18n gem可用,它就会使用它.

最近我升级了我的宝石,现在安装了0.3.7和0.4.0的i18n.当然,Rails想要加载和使用导致我的项目出错的最新版本.我尝试将gem版本设置为0.3.7,这可以解决Web应用程序中的错误.但是,我们使用resque和resque_mailer来延迟发送消息.当工作人员从队列中获取邮件程序作业时,它会忽略environment.rb中的config.gem要求并使用版本0.4.0.

理想情况下,我想告诉Rails根本不使用i18n gem.我怎么做?

更新:从beta 4开始,Rails 3现在需要i18​​n版本0.4.1.我不知道有多少人没有遇到这个问题,因为现在看来如果安装了Rails 2和Rails 3,你就会遇到这个问题.

ruby ruby-on-rails internationalization resque

10
推荐指数
1
解决办法
3701
查看次数

相关模型的每个实例的活动管理范围

我有动态主动管理范围的问题.我试图在我的应用程序中为"项目"的每个"经理"创建一个范围.但是,在创建(或分配给项目)新管理器时,范围似乎不会更新,但如果我重新启动服务器,它们会更新.因此代码本身"有效",但显然不是我想要的方式.我是ruby/rails noob所以我不确定我是否需要做某些事情以某种方式"刷新"范围.

作为一个FYI,我在Heroku Cedar上使用Rails 3.2和ActiveAdmin

这是有问题的代码(有效但只在服务器重启后引入新的管理器):


Manager.find_each do |m|
  scope m.first_name do |projects|
    projects.where(:manager_id => m.id)
  end
end
Run Code Online (Sandbox Code Playgroud)

以及整个Active Admin Project模型:

ActiveAdmin.register Project do
 menu :priority => 1
 index do
  column :name
  column :company_name
  column :status
  column :projection do |project|
   number_to_currency project.projection
  end
  column :updated_at
  default_actions
 end

 scope :all
 scope :working, :default => true do |projects|
  projects.where(:status => 'working')
 end

 Manager.find_each do |m|
  scope m.first_name do |projects|
    projects.where(:manager_id => m.id)
  end
 end
end
Run Code Online (Sandbox Code Playgroud)

ruby ruby-on-rails heroku activeadmin

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