小编Sea*_*ner的帖子

Factory Girl:如何在不创建新记录的情况下将记录与另一条记录相关联?

我正在使用Factory Girl/Rspec2/Rails 3.

factories.rb,我有:

Factory.define :user do |user|
  user.name       'Some guy'
  user.email      'some_guy@somewhere.org'
  user.password   'password'
end

Factory.define :org_admin, :parent => :user do |user|
  user.email 'org_admin@somehwere.org'
end

Factory.define :user_with_membership_request, :parent => :user do |user|
  user.email 'user_with_membership_request@somehwere.org'
end

Factory.define :organization do |org|
  org.name        'MEC'
  org.description 'Mountain Equipment Co-op'
end

Factory.define :membership do |membership|
  membership.user { Factory(:user) }
  membership.organization { Factory(:organization) }
end

Factory.define :admin_membership, :parent => :membership do |membership|
  membership.user { Factory(:org_admin) }
  membership.is_admin true
  membership.status 'active'
end

Factory.define :membership_request, …
Run Code Online (Sandbox Code Playgroud)

ruby-on-rails rspec2 factory-bot

18
推荐指数
1
解决办法
4783
查看次数

FactoryGirl:如何在不传递参数的情况下定义工厂

我正在使用Rails 3/factory_girl_rails/Rspec 2和Ruby 1.8

我用这种方式定义了我的工厂:

Factory.define :user do |u|
  u.name       'Some guy'
  u.sequence(:email) {|n| "person#{n}@example.com" }
  u.password   'password'
end

Factory.define :password_reset_user, :parent => :user do |user|
  user.password_reset_key   '111222333444'
end
Run Code Online (Sandbox Code Playgroud)

我的测试运行良好.

我注意到在工厂女孩页面上,他们在他们的例子中定义了工厂而没有在do之后传递参数(http://github.com/thoughtbot/factory_girl):

# This will guess the User class
FactoryGirl.define :user do
  factory :user do
    first_name 'John'
    last_name  'Doe'
    admin false
  end

  # This will use the User class (Admin would have been guessed)
  factory :admin, :class => User do
    first_name 'Admin'
    last_name  'User'
    admin true
  end

  # The …
Run Code Online (Sandbox Code Playgroud)

rspec ruby-on-rails rspec2 ruby-on-rails-3 factory-bot

4
推荐指数
1
解决办法
7136
查看次数

有没有办法停止执行调用方法以避免Rails中的DoubleRenderError?

在我的控制器中我有:

def update
  case params[:something]
  when 'x'
    if all_is_good
      good_stuff_happens
      flash[:notice] = "Good stuff happened"
    else
      access_denied
    end
  when 'y'
    other_good_stuff_happens
    flash[:notice] = "Other good stuff happened"
  when 'z'
    even_more_good_stuff_happens
    flash[:notice] = "Even more good stuff happened"
  end
  redirect_to good_place_path       
end
Run Code Online (Sandbox Code Playgroud)

在我的ApplicationController中,我有:

def access_denied
  redirect_to message_path, :alert => 'Access Denied'
end
Run Code Online (Sandbox Code Playgroud)

在大多数情况下,我总是希望在case语句之后重定向到good_place_path.

偶尔,我想拒绝访问并将其留在那里.有没有办法可以打电话

acccess_denied
Run Code Online (Sandbox Code Playgroud)

从我的控制器,然后不返回到调用控制器(或者它尝试进行第二次重定向,因此我得到DoubleRenderError).我明白我可以放

redirect_to good_place_path       
Run Code Online (Sandbox Code Playgroud)

在每个when语句中,但我想知道是否有更优雅的解决方案.

谢谢.

肖恩

ruby ruby-on-rails

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