首页 \ 问答 \ 如何使用has_and_belongs_to_many关联获取FactoryGirl模型属性?(How to get FactoryGirl model attributes with has_and_belongs_to_many association?)

如何使用has_and_belongs_to_many关联获取FactoryGirl模型属性?(How to get FactoryGirl model attributes with has_and_belongs_to_many association?)

我正在尝试使用FactoryGirl.attributes_for(:trip)关联获取FactoryGirl.attributes_for(:trip) :countries因为控制器测试失败 - :countries缺少的:countries :trip属性):

TripsController:

class TripsController < ApplicationController
  def create
    trip = Trip.new(create_params)
    if trip.save
      redirect_to trips_path, notice: 'Trip successfully created.'
    else
      redirect_to :back, alert: trip.errors.full_messages.join('<br>').html_safe
    end
  end

  def create_params
    params.require(:trip).permit(:end_date, :description, country_ids: [], countries: [])
  end
end

RSpec TripsController测试:

describe TripsController do
  describe 'POST #create' do
    before { post :create, trip: attributes_for(:trip) }
    it { is_expected.to redirect_to trips_path }
  end
end

旅行模型:

class Trip < ActiveRecord::Base
  # Associations
  has_and_belongs_to_many :countries

  #Validations
  validate :require_at_least_one_country

  private

  def require_at_least_one_country
    if country_ids.empty? && countries.count == 0
      errors.add(:base, 'Please select at least one country')
    end
  end
end

旅行工厂:

FactoryGirl.define do
  factory :trip do
    description  { Faker::Lorem.sentence }
    end_date  { DateTime.now + 1.day }

    after(:build) do |trip, evaluator|
      trip.countries << FactoryGirl.create(:country, :with_currencies)
    end
  end
end

的Gemfile:

factory_girl_rails (4.5.0)

试过这个: http//makandracards.com/jan0sch/11111-rails-factory-and-has_and_belongs_to_many ,但没用。


I'm trying to get FactoryGirl.attributes_for(:trip) with HABTM association :countries because controller test fails - :countries absent in :trip attributes):

TripsController:

class TripsController < ApplicationController
  def create
    trip = Trip.new(create_params)
    if trip.save
      redirect_to trips_path, notice: 'Trip successfully created.'
    else
      redirect_to :back, alert: trip.errors.full_messages.join('<br>').html_safe
    end
  end

  def create_params
    params.require(:trip).permit(:end_date, :description, country_ids: [], countries: [])
  end
end

RSpec TripsController test:

describe TripsController do
  describe 'POST #create' do
    before { post :create, trip: attributes_for(:trip) }
    it { is_expected.to redirect_to trips_path }
  end
end

Trip model:

class Trip < ActiveRecord::Base
  # Associations
  has_and_belongs_to_many :countries

  #Validations
  validate :require_at_least_one_country

  private

  def require_at_least_one_country
    if country_ids.empty? && countries.count == 0
      errors.add(:base, 'Please select at least one country')
    end
  end
end

Trip factory:

FactoryGirl.define do
  factory :trip do
    description  { Faker::Lorem.sentence }
    end_date  { DateTime.now + 1.day }

    after(:build) do |trip, evaluator|
      trip.countries << FactoryGirl.create(:country, :with_currencies)
    end
  end
end

Gemfile:

factory_girl_rails (4.5.0)

Tried this: http://makandracards.com/jan0sch/11111-rails-factorygirl-and-has_and_belongs_to_many, but useless.


原文:https://stackoverflow.com/questions/32558059
更新时间:2022-05-30 10:05

最满意答案

您忘记了main.go的包前缀,并且您的函数未导出 ,这意味着它无法从其他包访问。 要导出标识符,请在名称的开头使用大写字母:

utils.UtilsDoSomething()

一旦你有了utils前缀,你也可以删除Utils的名字:

utils.DoSomething()

如果你想从utils包中导入所有的东西到主应用程序的命名空间中,请执行以下操作:

import . "cvs/user/project/utils"

之后,您可以直接使用DoSomething


You forgot the package prefix in main.go and your function is not exported, meaning it is not accessible from other packages. To export an identifier, use a capital letter at the beginning of the name:

utils.UtilsDoSomething()

Once you have the utils prefix you can also drop the Utils in the name:

utils.DoSomething()

If you want to import everything from the utils package into the namespace of your main application do:

import . "cvs/user/project/utils"

After that you can use DoSomething directly.

相关问答

更多

相关文章

更多

最新问答

更多
  • 获取MVC 4使用的DisplayMode后缀(Get the DisplayMode Suffix being used by MVC 4)
  • 如何通过引用返回对象?(How is returning an object by reference possible?)
  • 矩阵如何存储在内存中?(How are matrices stored in memory?)
  • 每个请求的Java新会话?(Java New Session For Each Request?)
  • css:浮动div中重叠的标题h1(css: overlapping headlines h1 in floated divs)
  • 无论图像如何,Caffe预测同一类(Caffe predicts same class regardless of image)
  • xcode语法颜色编码解释?(xcode syntax color coding explained?)
  • 在Access 2010 Runtime中使用Office 2000校对工具(Use Office 2000 proofing tools in Access 2010 Runtime)
  • 从单独的Web主机将图像传输到服务器上(Getting images onto server from separate web host)
  • 从旧版本复制文件并保留它们(旧/新版本)(Copy a file from old revision and keep both of them (old / new revision))
  • 西安哪有PLC可控制编程的培训
  • 在Entity Framework中选择基类(Select base class in Entity Framework)
  • 在Android中出现错误“数据集和渲染器应该不为null,并且应该具有相同数量的系列”(Error “Dataset and renderer should be not null and should have the same number of series” in Android)
  • 电脑二级VF有什么用
  • Datamapper Ruby如何添加Hook方法(Datamapper Ruby How to add Hook Method)
  • 金华英语角.
  • 手机软件如何制作
  • 用于Android webview中图像保存的上下文菜单(Context Menu for Image Saving in an Android webview)
  • 注意:未定义的偏移量:PHP(Notice: Undefined offset: PHP)
  • 如何读R中的大数据集[复制](How to read large dataset in R [duplicate])
  • Unity 5 Heighmap与地形宽度/地形长度的分辨率关系?(Unity 5 Heighmap Resolution relationship to terrain width / terrain length?)
  • 如何通知PipedOutputStream线程写入最后一个字节的PipedInputStream线程?(How to notify PipedInputStream thread that PipedOutputStream thread has written last byte?)
  • python的访问器方法有哪些
  • DeviceNetworkInformation:哪个是哪个?(DeviceNetworkInformation: Which is which?)
  • 在Ruby中对组合进行排序(Sorting a combination in Ruby)
  • 网站开发的流程?
  • 使用Zend Framework 2中的JOIN sql检索数据(Retrieve data using JOIN sql in Zend Framework 2)
  • 条带格式类型格式模式编号无法正常工作(Stripes format type format pattern number not working properly)
  • 透明度错误IE11(Transparency bug IE11)
  • linux的基本操作命令。。。