I have a callback of a model that needs to create a dependent object based on another field entered in the form. But params
is undefined in the callback method. Is there another way to access it? What's the proper way to pass a callback method parameters from a form?
class User < ActiveRecord::Base
attr_accessible :name
has_many :enrollments
after_create :create_enrollment_log
private
def create_enrollment_log
enrollments.create!(status: 'signed up', started: params[:sign_up_date])
end
end
params are not accessible in models, even if you pass them as a parameter then it would be consider as bad practice and might also be dangerous.
What you can do is to create virtual attribute and use it in your model.
class User < ActiveRecord::Base
attr_accessible :name, :sign_up_date
has_many :enrollments
after_create :create_enrollment_log
private
def create_enrollment_log
enrollments.create!(status: 'signed up', started: sign_up_date)
end
end
Where sign_up_date is your virtual attribute
params will not be available inside the models.
One possible way to do this would be to define a virtual attribute in the user model and use that in the callback
class User < ActiveRecord::Base
attr_accessible :name,:sign_up_date
has_many :enrollments
after_create :create_enrollment_log
private
def create_enrollment_log
enrollments.create!(status: 'signed up', started: sign_up_date)
end
end
you will have to make sure that the name of the field in the form is user[:sign_up_date]
来源:https://stackoverflow.com/questions/13612846/how-to-access-params-in-the-callback-of-a-rails-model