我有一个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查找用户的方式有问题。我想知道是否有人知道我在做错什么,还是我需要添加更多信息。谢谢。
答案 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
自然,这假设您已正确设置Receipt
和User
之间的关联(即使用belongs_to
)。