ruby on rails 在关联调用中使用变量

Posted

技术标签:

【中文标题】ruby on rails 在关联调用中使用变量【英文标题】:ruby on rails use variable in association call 【发布时间】:2012-09-21 15:08:17 【问题描述】:

我有一个辅助函数,它呈现一个部分,我将一个名为方法的变量传递到视图中......

在视野中我使用

<%= friend.method.profile.picture %>

方法变量可以是userfriend

我得到了

wrong number of arguments(0 for 1)

我想我如何使用传递给关联调用的变量存在问题...也许我必须以某种方式对其进行转义?

【问题讨论】:

【参考方案1】:

如果我理解您想要什么,您将尝试根据名为“方法”的字符串参数的值动态调用函数。此外,'method' 是 Ruby 中的一个现有函数(因此您的错误消息是关于 'wrong number of args' vs 'undefined method'),所以我建议在您的代码中重命名它。

TLDR:

    将变量重命名为“person”(而不是“method”),然后

    尝试一些元编程来使用 send 调用函数:

    friend.send(person).profile.picture

【讨论】:

【参考方案2】:

这里的答案与 ~AmirRubin 相同,但更加充实。

我假设朋友是对象,方法是助手,.profile 是您希望助手使用的方法。

将你的助手定义为:

def call_method(object, method_name)
  object.send(method_name)
end

在你看来,称之为:

<%= call_method(friend, :profile).picture %>

如果我的假设是错误的,请调整它。如果您需要将方法名称(符号)发送到局部,请在本地传递它。

【讨论】:

以上是关于ruby on rails 在关联调用中使用变量的主要内容,如果未能解决你的问题,请参考以下文章

Ruby on Rails: :include 与子模型的多态关联

Ruby on Rails - 简单表单自动完成关联搜索

与Ruby on Rails中的范围相关联

带有 jquery datepicker 的 Ruby on rails

为啥 Ruby on Rails 不使用 .includes() 加载我的关联对象?

Ruby on Rails - 使用符号数组获取对象关联值