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>

controllers/restaurants.rb

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

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

これにより、ResataurantsController#index で NoMethodError が発生します

パラメーター:

{"検索項目" => "15"}

何らかの理由で、タグ オブジェクトが から適切に渡されておらずhome/index.html.erb、Tag-object :id だけがレストラン コントローラーに渡されています。この方法で完全なオブジェクトを渡すことはできません。私は何を間違っていますか?

4

1 に答える 1

2

そのようなgetparamsを介してオブジェクトを送信することはできません。通常、オブジェクトのID(既に実行している)を渡してから、コントローラーでルックアップを実行します。

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

「search_item」パラメータの名前を「tag_id」に変更する方が理にかなっています。

于 2012-06-29T15:49:03.687 に答える