我确信有更好的方法可以做到这一点,但由于我的经验不足,我很难找到更好的方法。我有一个链接需要发送和对象控制器进行处理。它无法正常工作:
视图/家/ index.html.erb
<% search_term = "pizza" %>
<% @tag = Tag.find(:all, :conditions => ["name = ?", search_term ]).first %>
<li> <%= link_to(search_term, {:controller => "restaurants", :action => "index", :search_item => @tag}) %> </li>
控制器/ restaurants.rb
def index
search_tag = params[:search_item]
@restaurants = Restaurant.search_by_tag(search_tag)
模型/ restaurant.rb
Class Restauarant < ActiveRecord::Base
def self.search_by_tag(search_tag)
search_condition = search_tag.name
@tags = Tag.find(:all, :conditions => [" name = ?", search_condition ])
@tag = @tags.first
@Restaurants = @tag.restaurants
end
end
这导致ResataurantsController #index
中的NoMethodError参数:
{“searchitem”=&gt; “15”}
由于某种原因,标记对象没有从home/index.html.erb
正确传递,只是将Tag-object:id传递给了restaurants控制器。不可能以这种方式传递完整的对象。我做错了什么?
答案 0 :(得分:2)
你不能通过这样的params提交一个对象。通常,您只需传递对象的id(您已经在做),然后在控制器中进行查找:
@tag = Tag.find(params[:search_item])
将“search_item”参数重命名为“tag_id”会更有意义。