I have the following helper method:
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
The problem is that when I call this method, the test_sets_id is skipped when data is inserted in the table in the development environment, but not in the production environment. The three other attributes are saved fine.
All the attributes are defined in the potential_followers table.
I also have all the attributes in the potential_follower_params method in the potential_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 is defined as an integer in the table. I even tried harcoding the value of t_id:
t_id = 12
But it still would not work in production.
Here's what's in the models/potential_follower.rb:
class PotentialFollower < ActiveRecord::Base
belongs_to :TestSet
end
Here's the method in 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
Any ideas?
Probably the production database does not have the field test_sets_id
, but also in production mode, rails still creates the database record, while just ignoring the test_sets_id
field of the hash. A rake db:migrate RAILS_ENV=production
should solve the issue.
You are straying from the Rails conventions. The belongs_to should be in snake case and singular, ie :
belongs_to :test_set
The database column should be singular as well. So the column should be renamed to test_set_id
.
What a belongs_to :test_set
declaration will do is that it will generate a test_set_id=
(and a test_set=
method too) on PotentialFollower. That is the convention for Rails. Once you have changed your belongs_to, it should now successfully save the value in development and production.
See http://api.rubyonrails.org/classes/ActiveRecord/Associations/ClassMethods.html#method-i-belongs_to
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With