【问题标题】:incorporate a method into link_to rails 3将方法合并到 link_to rails 3
【发布时间】:2012-11-30 02:38:34
【问题描述】:

我正在构建一个简单的食谱应用程序。我有一个按最受欢迎的顺序返回国家列表的方法

 class Country < ActiveRecord::Base

def self.top_countries
joins(:recipes).
  select('countries.*, count(*) AS recipes_count').
  group('countries.id').
  order('recipes_count DESC')
end

然后我像这样在视图中输出它

<% @toprankingcountry.each do |r|%>
 <ul>
 <li><%= link_to r.name %></li>
</ul>

所以这只是列出了我所有的结果

然后我有一个名为 worldrecipes 的单独控制器,其中包含每个国家/地区名称的操作

我要做的是链接到该国家/地区的特定操作(该操作将与该国家/地区命名相同)

作为 Rails 新手,我不确定要阅读哪些资源来实现这一点,最好有一种方法来遍历此逻辑,然后在块中使用该方法?

【问题讨论】:

  • 您真的需要针对每个国家/地区采取单独的行动吗?我认为您应该在您的国家/地区控制器中进行动作表演,这就足够了。输入“rake routes”,您将看到类似 GET country ... 的内容。您可以在循环中执行“link_to r.name, country_path(r)”。如果您想在 url 中显示国家/地区名称,请给“friendly_id”gem 一个机会。
  • 刚刚意识到 - 请参阅答案下的评论,感谢您的输入,感谢

标签: ruby-on-rails ruby-on-rails-3 methods hyperlink


【解决方案1】:

a) 我建议您不要在您的路线中针对每个国家/地区执行操作,因为这会真正使您的 routes.rb 混乱。您可以将通配符和参数定义为路线的一部分,但只有一个操作应处理不同的国家/地区。

所以你可以有这样的网址:/world/germany, /world/france 但它们都应该在您的控制器中调用相同的操作。

b) link_to 接受 2 个参数。首先是要显示的标题,第二个参数是url。

所以你可以像这样链接到排名靠前的国家:

<li><%= link_to r.name, country_worldrecipes_path(r) %></li>

现在您只需为 country_worldrecipes_path 定义正确的路线 有关路由look here的更多信息。

【讨论】:

  • 谢谢你的回答,希望在这里得到一点理解,所以在我的 worldrecipes 控制器中,我会有一个显示动作,就像我在我的应用程序中显示一个食谱时一样。这样就无需针对每个国家/地区采取单独行动了吗?
  • 没错。您可以将国家/地区名称作为路线的一部分 (/contry/:name),然后使用 params[:name] 在显示操作中获取正确的国家/地区。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-08-21
  • 2013-07-18
  • 2012-03-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-01-11
相关资源
最近更新 更多