Rails 最佳实践控制器或模型
Rails Best practice Controller or Model
我正在尝试根据 Rails 最佳实践重构我的代码。现在我面临一个问题,我在控制器上有两个实例变量,但我无法将它们移动到模型中。我们在这里:
feedbacks_controller.rb
def get_feedback
...
@employee = Employee.find_by(:name)
if @employee.blank?
...
else
@client_feedback = Feedback.new(:screen_name => @screen_name, :feedback => @feedback)
@client_feedback.employee_id = @employee.id
@client_feedback.client_id = @employee.client_id
@client_feedback.location_id = @employee.location_id
@client_feedback.save
根据 Rails Best practice Move Model Logic into the Model else 中的所有赋值都需要移至模型,我的疑问是如何在模型中启动 @employee
实例变量?
如果您在 Employee 和 Feedback 之间有关系,您可以这样做
如果你有 has_one 关系
@client_feedback = @employee.feedbacks.new(screen_name: @screen_name, feedback: @feedback)
@client_feedkback.save
如果你有 has_many 关系
@employee.feedbacks << Feedbacks.new(screen_name: @screen_name, feedback: @feedback)
@employee.save
关于其他字段(客户端和位置 ID),您似乎有冗余数据。尽量将这些数据保存在一个地方。
已添加
在你的模型中你有 client_id 和 location_id,如果你真的需要在反馈模型上使用它们,你可以做类似
的事情
@employee.feedback = Feedback.new(screen_name: @screen_name, feedback: @feedback, client_id : @employee.client_id, location_id:@employee.location_id )
@employee.save
我正在尝试根据 Rails 最佳实践重构我的代码。现在我面临一个问题,我在控制器上有两个实例变量,但我无法将它们移动到模型中。我们在这里:
feedbacks_controller.rb
def get_feedback
...
@employee = Employee.find_by(:name)
if @employee.blank?
...
else
@client_feedback = Feedback.new(:screen_name => @screen_name, :feedback => @feedback)
@client_feedback.employee_id = @employee.id
@client_feedback.client_id = @employee.client_id
@client_feedback.location_id = @employee.location_id
@client_feedback.save
根据 Rails Best practice Move Model Logic into the Model else 中的所有赋值都需要移至模型,我的疑问是如何在模型中启动 @employee
实例变量?
如果您在 Employee 和 Feedback 之间有关系,您可以这样做
如果你有 has_one 关系
@client_feedback = @employee.feedbacks.new(screen_name: @screen_name, feedback: @feedback)
@client_feedkback.save
如果你有 has_many 关系
@employee.feedbacks << Feedbacks.new(screen_name: @screen_name, feedback: @feedback)
@employee.save
关于其他字段(客户端和位置 ID),您似乎有冗余数据。尽量将这些数据保存在一个地方。
已添加
在你的模型中你有 client_id 和 location_id,如果你真的需要在反馈模型上使用它们,你可以做类似
的事情@employee.feedback = Feedback.new(screen_name: @screen_name, feedback: @feedback, client_id : @employee.client_id, location_id:@employee.location_id )
@employee.save