0

私は、基本的な scaffolded crud アプリケーションを少し変更した新しい Rails 開発者です。

次のエラーが表示されます。

undefined method description for #<ActiveRecord::Relation:0x00000102df26d8>

私が訪問したときjohn/recipes/46。これが私の見解です:

<h1 itemprop="name"><%= @recipe.name %></h1>
<ul>        
   <li><%= link_to 'Edit', edit_recipe_path(@recipe) %></li>
</ul>
<p itemprop="description"><%= @recipe.description %></p>

ここに私のルートがあります:

match "/:username" => "recipes#index"
scope ':username' do
  resources :recipes
end

ここに私のショーのインデックスがあります:

def show
 @user = User.find_by_username params[:username]
 @recipe = Recipe.where(:user_recipe_id => params[:id])

 respond_to do |format|
  format.html # show.html.erb
  format.json { render json: @recipe }
 end
end

と私のモデル:

before_save :set_next_user_recipe_id

belongs_to :users

validates :user_recipe_id, :uniqueness => {:scope => :user_id}

def to_param
  self.user_recipe_id.to_s
end

def set_next_user_recipe_id
  self.user_recipe_id ||= get_new_user_recipe_id
end

def get_new_user_recipe_id
  user = self.user
  max = user.recipes.maximum('user_recipe_id') || 0
  max + 1
end

attr_accessible :description, :duration, :author, :url, :name, :yield, :ingredients_attributes, :user_recipe_id, :directions_attributes, :tag_list, :image

データベースの 46 番目のレシピを表示する代わりに、John に属する 46 番目のレシピを表示Recipe.where(:user_recipe_id => params[:id])しよRecipe.where(:id => params[:id])うとしているからです。john/recipes/46

助けてくれてありがとう!

4

1 に答える 1

1

1 つのレシピのみを検索しようとしていますが、クエリは複数のレシピを検索しています。where(...)で終わらずにプレーンを使用すると、Rails は「この ID を持つ (1 つの) レシピを表示する」ではなく、「このユーザー ID を持つすべての(.first複数の) レシピを表示する」と解釈します。

.firstしたがって、クエリの最後に次のいずれかを配置する必要があります。

@recipe = Recipe.where(:user_recipe_id => params[:id]).first

または、1 つのレコードのみを返す ActiveRecord ファインダーを使用します。

@recipe = Recipe.find_by_user_recipe_id(params[:id])
于 2013-07-02T01:35:36.693 に答える