我有model.rb
class Foo
def baz(param1, param2, param3, param4)
puts 'something'
end
end
controller.rb
def signup
param4 = params[:param4] || 'N'
begin
@foo.baz(Integer(params[:param1]),
params[:param2],
params[:param3],
param4)
head :ok
rescue ArgumentError => e
render_error(:bad_request, e.message)
end
end
这是在模型上调用实例方法的正确方法吗?这个param4 = params[:param4] || 'N'
也应该在模型中完成吗?
答案 0 :(得分:1)
这是在模型上调用实例方法的正确方法吗?
是的,如果@foo
是Foo
这个param4 = params [:param4] || ' N'在模型中完成?
您可以将模型上的最后一个参数变量设置为选项,如此
class Foo
def baz(param1, param2, param3, param4 = 'N')
puts 'something'
end
end
并且无需在控制器中设置它
def signup
@foo.baz(Integer(params[:param1]),
params[:param2],
params[:param3],
params[:param4])
head :ok
rescue ArgumentError => e
render_error(:bad_request, e.message)
end
由于params[:param4]
nil
是'N'
,因此会baz
模式中的Foo
方法中指定param4
。
您是否在模型中设置param4
取决于您:
'N'
设置为param4
应该或需要在控制器外部进行,或signup
设置默认值对于param4
控制器操作是唯一的,{{1}}不应该有默认设置,因为它可能会在别处使用答案 1 :(得分:0)
我认为你应该在模型中处理它:
class Foo
def baz(param)
param1 = Integer(params[:param1])
param2 = params[:param2]
param3 = params[:param2]
param4 = params[:param4] || 'N'
puts 'something'
end
end