Ruby on rails 3 如何通过rails中的参数传递对象?

Ruby on rails 3 如何通过rails中的参数传递对象?,ruby-on-rails-3,parameters,Ruby On Rails 3,Parameters,我相信有更好的方法可以做到这一点,但由于我缺乏经验,我很难找到更好的方法。我有一个链接,需要发送和对象到控制器进行处理。它工作不正常: views/home/index.html.erb <% search_term = "pizza" %> <% @tag = Tag.find(:all, :conditions => ["name = ?", search_term ]).first %> <li> <%= link_to(search_t

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

views/home/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>
models/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
Class Restarant[“name=?”,search\u condition])
@tag=@tags.first
@餐厅=@tag.Restaurants
结束
结束
这会导致ResaturantsController索引中出现Nomethoder错误

参数:

{“searchitem”=>“15”}


由于某些原因,标记对象没有从
home/index.html.erb
正确传递,而只是将标记对象:id传递给餐厅控制器。不可能以这种方式传递完整对象。我做错了什么?

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

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

将“search\u item”参数重命名为“tag\u id”更有意义。

您不能通过HTTP传递“对象”。根本性的误解。“你不能那样做,先生!”哇,我在想什么……等等,难道不是
@restaurant=restaurant.new(params[:restaurant])
就是一个传递“对象”的例子吗?一点也不,这是一堆传递的值,然后用来创建一个对象。所有http传递都是字符串:其他任何东西都是烟雾和镜像。
@tag = Tag.find(params[:search_item])