0

我确信有更好的方法可以做到这一点,但由于我缺乏经验,我很难找到更好的方法。我有一个链接需要发送并反对控制器进行处理。它无法正常工作:

意见/主页/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>

控制器/餐厅.rb

def index
  search_tag = params[:search_item]
  @restaurants = Restaurant.search_by_tag(search_tag)

模型/餐厅.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

参数:

{"搜索项" => "15"}

出于某种原因,标签对象没有从 中正确传递,home/index.html.erb而只是将 Tag-object :id 传递给餐馆控制器。不可能以这种方式传递一个完整的对象。我究竟做错了什么?

4

1 回答 1

2

您不能像这样通过获取参数提交对象。通常,您只需传递对象的 id(您已经在这样做),然后在控制器中进行查找:

@tag = Tag.find(params[:search_item])

将“search_item”参数重命名为“tag_id”会更有意义。

于 2012-06-29T15:49:03.687 回答