我的控制器中的show函数找不到对象的创建者

时间:2018-08-09 16:00:26

标签: ruby-on-rails ruby activerecord rails-activerecord

我有一个Rails应用程序的一部分,用户将在其中创建一个食谱,该食谱将保存在他们的“食谱”中。其他用户将可以从其他用户那里获取食谱。因此,应用程序中将有一个方面显示谁创建了配方。

食谱架构

create_table "recipes", force: :cascade do |t|
 t.string "recipe_name"
 t.string "description"
 t.integer "calories"
 t.integer "carbs"
 t.integer "fats"
 t.integer "protein"
 t.integer "user_id"
 t.datetime "created_at", null: false
 t.datetime "updated_at", null: false
end

我遇到麻烦的地方正在显示食谱的创建者。

  def show
   @user = current_user
   @recipe = Recipe.find_by(params[:id])
   creator = User.find_by(params[@recipe.user_id])
   @creator = creator.first_name
  end

因此,目前我有两个用户的John(Id:1)和Alex(Id:2)。当我让亚历克斯(Alex)制作食谱并且在@recipe下撬开时,我在调用@ recipe.user_id时得到的user_id为2。

但是,当我在创建者下调用撬并调用创建者时,我得到的user_id为1,我得到了约翰。我相信我尝试使用@recipe中的user_id查找用户的方式有问题。我想知道是否有人知道我在做错什么,还是我需要添加更多信息。谢谢。

1 个答案:

答案 0 :(得分:1)

此:

User.find_by(params[@recipe.user_id])

由于以下几个原因没有意义:

  • find_by需要类似哈希的结构。类似于:User.find_by(id: xxx)
  • params[@recipe.user_id]毫无意义,因为这将是类似params[1]的东西,这不是您想要的。

此:

@recipe = Recipe.find_by(params[:id])

还患有格式错误的find_by

因此,请尝试以下操作:

def show
  @user = current_user
  @recipe = Recipe.find(params[:id])
  creator = @recipe.user
  @creator = creator.first_name
end

自然,这假设您已正确设置ReceiptUser之间的关联(即使用belongs_to)。