RAILS如何给Model函数赋一个参数

时间:2018-03-21 19:07:29

标签: ruby-on-rails ruby

我在user.rb模型中有这个功能:

  Dim OpenForm1 As New Form2
  Dim OpenForm2 As New Form4

    If String.IsNullOrEmpty(OpenForm1.tbOrderReceived1.Text) Then
        OpenForm1.PassOrderKitchen1 = rbTable1.Text + ":" + cbSpagethi.Text + "-" + tbSpagehti.Text
    ElseIf (OpenForm1.tbOrderReceived1.Text > 0) Then
        OpenForm2.PassOrderKitchen2 = rbTable1.Text + ":" + cbSpagethi.Text + "-" + tbSpagehti.Text
    End If

我想从Views(new.html.erb)上的脚本中调用此函数,如下所示:

def change_key
  self.public_key = params[:public_key]
end

我希望self.public_key获取x值

我得到的结果是:

  

未定义的局部变量或方法`params'对

     

有什么想法吗?

2 个答案:

答案 0 :(得分:0)

你的方法需要一个争论:

def change_key(arg)
  self.public_key = arg
end

然而,由于这是一个模型方法,因此不应在视图中直接调用它,因为这不是MVC。但是如果你想在控制器动作中使用它,那可能会有效。您需要定义一个控制器操作,并且可能使用javascript向您的控制器操作发出ajax请求,然后它可以在您的模型上运行。

答案 1 :(得分:0)

要传递参数,您可以

def change_key(params)
  self.public_key = params[:public_key]
end

你可以称之为:

@model.change_key(x)

而且,只要@model有一个属性public_key,而x就像hash一样 - 那就应该有效。

当然,除非您希望保留@model.public_key。在这种情况下,它会更像是:

def change_key(params)
  self.public_key = params[:public_key]
  self.save
end

这很愚蠢,因为你可以一次性完成,比如:

def change_key(params)
  self.update(public_key: params[:public_key])
end

但是,为什么要简单地声明一个change_key方法:

@model.update(public_key: params[:public_key])

当然,你肯定不想在view中做,因为(IMO)你的view应该从不在视图中更改模型。这样做要求您的view图层需要您对model图层的深入了解 - 这会使您的应用程序变得脆弱。