我已经搜索过,但尚未找到答案。我想对可能有或没有名为city_id的参数的对象使用相同的编辑操作。如果city_id可用,那么我想将其发送到编辑页面。我的问题是如何使下面的代码只发送city_id(如果可用)?现在我收到一个错误,因为并非所有对象都有city_ids。
<%= link_to("Edit", {:action => 'edit', :id => loc.id, :city_id => loc.city_id}) %>
感谢您的帮助!
答案 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:更详细