在模型上调用实例方法并传递其参数

时间:2017-03-14 01:37:43

标签: ruby ruby-on-rails-4

我有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'也应该在模型中完成吗?

2 个答案:

答案 0 :(得分:1)

  

这是在模型上调用实例方法的正确方法吗?

是的,如果@fooFoo

的实例
  

这个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