如何通过轨道中的参数传递对象?

时间:2012-06-29 15:43:42

标签: ruby-on-rails-3 parameters

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

视图/家/ 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控制器。不可能以这种方式传递完整的对象。我做错了什么?

1 个答案:

答案 0 :(得分:2)

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

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

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