Атрибут сохранен в разработке, но не в производстве

У меня есть следующий вспомогательный метод:

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 пропускается, когда данные вставляются в таблицу в среде разработки, но не в производственной среде. Три других атрибута сохраняются в порядке.

Все атрибуты определены в таблице потенциальных_файлов.

У меня также есть все атрибуты в методе factor_follower_params в factor_followers_controller.rb:

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

Но это все равно не будет работать в производстве.

Вот что находится в models / потенциала_файловом.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

Есть идеи?

2 ответа

Вероятно, производственная база данных не имеет поля test_sets_id, но также и в производственном режиме, rails по-прежнему создает запись в базе данных, просто игнорируя test_sets_id поле хеша. rake db:migrate RAILS_ENV=production должен решить проблему.

Вы отклоняетесь от соглашений Rails. Owny_to должен быть в случае змеи и единственного числа, то есть:

belongs_to :test_set

Столбец базы данных также должен быть в единственном числе. Таким образом, столбец должен быть переименован в test_set_id,

Что belongs_to :test_set объявление будет делать то, что он будет генерировать test_set_id=test_set= метод тоже) на PotentialFollower. Это соглашение для Rails. После того, как вы изменили свой принадлежащий вам, он должен теперь успешно сохранить значение в разработке и производстве.

См. http://api.rubyonrails.org/classes/ActiveRecord/Associations/ClassMethods.html

Другие вопросы по тегам