Rails添加link_to参数(如果提供)

时间:2016-03-03 19:48:47

标签: ruby-on-rails

我已经搜索过,但尚未找到答案。我想对可能有或没有名为city_id的参数的对象使用相同的编辑操作。如果city_id可用,那么我想将其发送到编辑页面。我的问题是如何使下面的代码只发送city_id(如果可用)?现在我收到一个错误,因为并非所有对象都有city_ids。

<%= link_to("Edit", {:action => 'edit', :id => loc.id, :city_id => loc.city_id}) %>

感谢您的帮助!

1 个答案:

答案 0 :(得分:0)

有多种方法:

方法1:

<%= link_to("Edit", { :action => 'edit', :id => loc.id, :city_id => loc.try(:city_id) }) %>

优点:减少代码

缺点:即使没有?city_id=

,网址也会挂起city_id

方法2:

<% if loc.city_id.present? %>
  <%= link_to("Edit", { :action => 'edit', :id => loc.id, :city_id => loc.city_id }) %>
<% else %>
  <%= link_to("Edit", { :action => 'edit', :id => loc.id }) %>
<% end %> 

优点:明确,如果没有?city_id=

,则不会city_id挂起

缺点:更详细

===

此外,使用命名路由总是好的,而不是link_to。根据您传递的参数,假设您在config/routes.rb

中定义了以下内容
resources :locs

我会使用以下其中一项:

方法1:

<%= edit_loc_url(loc, :city_id => loc.try(:city_id)) %>

优点:减少代码,路线随应用程序中的更改而更新

缺点:即使没有?city_id=

,网址也会挂起city_id

方法2:

<% if loc.city_id.present? %>
  <%= edit_loc_url(loc, :city_id => loc.try(:city_id)) %>
<% else %>
  <%= edit_loc_url(loc, :city_id => loc.try(:city_id)) %>
<% end %> 

优点:明确,路线会根据应用程序中的更改进行更新,如果没有?city_id=则不会挂起city_id

Con:更详细