9

我有以下帮助方法:

def parse_potential_followers(params)
  t_id = TestSet.where(:test_name => params[:test_set][:test_name]).pluck(:id)[0].to_i
  screen_names = params[:potential_followers].first[1].split("\n").reject(&:blank?)
  screen_names.each do |s|
    potential_follower = PotentialFollower.new(
      :screen_name => s,
      :test_sets_id => t_id,
      :status => 'new',
      :slug => generate_slug([t_id.to_s, s])
    )
    potential_follower.save
  end
end

问题是当我调用这个方法时,在开发环境中向表中插入数据时会跳过test_sets_id,而在生产环境中则不会。其他三个属性保存得很好。

所有属性都在 potential_followers 表中定义。

我在 potential_followers_controller.rb 中还有 potential_follower_params 方法中的所有属性:

def potential_follower_params
  params.require(:potential_follower).permit(:screen_name, :test_sets_id, :connections, :status,
    :slug, :created_at, :updated_at)
end

test_sets_id 在表中定义为整数。我什至尝试对 t_id 的值进行编码:

t_id = 12

但它仍然无法在生产中工作。

这是模型/potential_follower.rb 中的内容:

class PotentialFollower < ActiveRecord::Base
  belongs_to :TestSet
end

这是 test_sets_contoller.rb 中的方法:

def create
    @test_set = TestSet.new(test_set_params)
    respond_to do |format|
        if @test_set.save
            parse_potential_followers(params)
            format.html { redirect_to @test_set, notice: 'Test set was successfully created.' }
            format.json { render :show, status: :created, location: @test_set }
        else
            format.html { render :new }
            format.json { render json: @test_set.errors, status: :unprocessable_entity }
        end
    end
end

有任何想法吗?

4

2 回答 2

1

可能生产数据库没有字段test_sets_id,但在生产模式下,rails 仍然创建数据库记录,而只是忽略test_sets_id散列的字段。Arake db:migrate RAILS_ENV=production应该可以解决问题。

于 2016-01-09T16:28:41.417 回答
1

您正在偏离 Rails 约定。该 belongs_to 应该是蛇形和单数形式,即:

belongs_to :test_set

数据库列也应该是单数的。所以该列应重命名为test_set_id.

声明的作用是在PotentialFollower 上belongs_to :test_set生成一个test_set_id=(以及一个方法)。test_set=这是 Rails 的约定。一旦你改变了你的belongs_to,它现在应该成功地保存了开发和生产中的价值。

http://api.rubyonrails.org/classes/ActiveRecord/Associations/ClassMethods.html#method-i-belongs_to

于 2016-01-10T07:56:59.507 回答