将哈希传递给rails中的路由

时间:2015-09-07 16:41:15

标签: ruby-on-rails ruby ruby-on-rails-4

在我的控制器的预览操作中,我有

@models = Model.all

在视图中,我试图遍历所有模型,绘制出相关的图像,并使用它们链接到自己的配置文件。

<% @models.each do |m| %>
<div> <%= link_to(image_tag (m.avatar.url(:thumb)), model_path())%> </div>
<% end %>

我需要将每个模型的id传递给路线。使用m.id不起作用,因为路由期望哈希。

不完全确定如何做到这一点。 SO上的其他帖子指的是未保存的实例等,与此无关。

2 个答案:

答案 0 :(得分:2)

尝试更改您的视图代码:

<% @models.each do |m| %>
<div> <%= link_to(image_tag (m.avatar.url(:thumb)), model_path())%> </div>
<% end %>

要:

<% @models.each do |m| %>
<div> <%= link_to(image_tag(m.avatar.url(:thumb)), model_path(m))%> </div>
<% end %>

答案 1 :(得分:0)

像往常一样,错误可能在一个完全不同的地方 - 你的括号。

model_path可以接受属性列表和哈希。很可能您认为由于错误消息(您应该包含在问题中)而期望哈希。实际上,您将路径传递到image_tag,而不是link_to

link_to(image_tag (m.avatar.url(:thumb)), model_path())

被解析为

link_to( image_tag(m.avatar.url(:thumb), model_path()) )

虽然:

link_to(image_tag (m.avatar.url(:thumb)), model_path())

被解析为

link_to( image_tag(m.avatar.url(:thumb)), model_path() )

方法名称和括号之间的这个空格是一个无声杀手。它是image_tag,期望在第二个参数中使用哈希。 :)

话虽如此 - 它仍然不起作用,但你现在应该得到一个不同的问题。