Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/56.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 控制器中的显示功能未找到对象的创建者_Ruby On Rails_Ruby_Activerecord_Rails Activerecord - Fatal编程技术网

Ruby on rails 控制器中的显示功能未找到对象的创建者

Ruby on rails 控制器中的显示功能未找到对象的创建者,ruby-on-rails,ruby,activerecord,rails-activerecord,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.int

我有一个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\u id时,我会得到一个2的用户id

然而,当我把撬杆放在creator下面并调用creator时,我得到了用户id 1,我得到了John。我相信我在@recipe中使用user_id查找用户的方法有问题。我想知道是否有人知道我做错了什么,或者我是否需要补充更多信息。谢谢

这是:

User.find_by(params[@recipe.user_id])
@recipe = Recipe.find_by(params[:id])
由于以下几个原因没有意义:

  • find_by
    需要类似散列的结构。类似于:
    User.find\u 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

当然,这是假设您已正确设置了
收据
用户
之间的关联(即,使用
属于
)。

参数[@recipe.User\u id]
,这似乎很可疑;此外,您还可以在
配方
模型中创建一个
归属于:user
,然后只需
@creator=@Recipe.user.first\u name
即可。谢谢