有没有办法模型方法可以使用变量而不显式传递它们?

时间:2014-07-06 23:57:05

标签: ruby-on-rails variables

我知道这听起来像一个荒谬的问题,但我试图解决潜在雇主给出的挑战。我有一个架构和几个模型及其方法。几乎所有的方法都没有传入任何变量。意思是没有一个方法看起来像这样:

def this_is_my_method(variable)
  #stuff
end

def this_is_my_method variable
  #stuff
end

但是有一些方法可以清楚地使用这样的变量:

def build_address
  if variable
    # do something
  end
end

在某些情况下,模型方法是否会知道某些参数或变量的RoR方式?

所以,如果我的控制器正在接收看起来像这样的params:

?my_method[begin]=1&my_method[end]=5

是模型方法" my_method"知道什么"开始"和"结束"在哪里?

def my_method
  if self.begin == self.end
    # do something
  else
    # do something else
  end
end

1 个答案:

答案 0 :(得分:0)

请记住,模型方法可以访问该模型实例的所有属性(和其他方法)。

所以(例如)这将是一个有效的模型方法。

class User < ActiveRecord::Base

  def full_name
    [first_name, last_name].join(' ')
  end

end

这是一个属性user.first_name和一个属性user.last_name,并将它们组合起来创建一个新方法user.full_name

编辑为@Sanket建议您可以将值传递给模型,如果您将它们设置为属性访问者...

def SomeController < ApplicationController

  def some_controller_method

    @user = User.find(params[:id])

    @user.begin = params[:begin]
    @user.end = params[:end]
    @user.some_model_method
  end
end

def User < ActiveRecord::Base
  attr_accessor :begin, :end
  def some_model_method
    if self.begin == self.end
      # do something
    else
      # do something else
    end
  end
end

虽然坦率地说,我宁愿只将值作为方法参数传递。