活动记录关联错误

用户名

我正在创建一个包含食谱数据库的Web应用程序。我正在努力实现一项功能,以允许用户将配方添加到他们的收藏夹列表中,并且知道这涉及到Active Record关联。以下是我尝试过的。不幸的是,我收到以下错误消息。

Could not find the source association(s) :favorite or :favorites in model FavoriteRecipe. Try 'has_many :favorites, :through => :favorite_recipes, :source => <name>'. Is it one of :recipe or :user?

我已经在ActiveRecord Associations下搜索了RubyonRails指南,并尝试了此代码,但是出现了以上错误。

这是我的食谱模型Recipe.rb

class Recipe < ActiveRecord::Base
  belongs_to :user
  has_many :favorite_recipes
  has_many :favorited_by, through: :favorite_recipes, source: :user
end

这是我的用户模型User.rb

class User < ActiveRecord::Base
  has_many :recipes
  has_many :favorite_recipes
  has_many :favorites, through: :favorite_recipes
end

这是我最喜欢的食谱模型favorite_recipe.rb

class FavoriteRecipe < ActiveRecord::Base
  belongs_to :recipe
  belongs_to :favorite
  belongs_to :user
end

这是我最喜欢的食谱迁移文件

class CreateFavoriteRecipes < ActiveRecord::Migration
  def change
    create_table :favorite_recipes do |t|
      t.string :recipe_id
      t.string :integer
      t.string :user_id
      t.string :integer

    t.timestamps
    end
  end
end

在Rails Console中玩转,我尝试了以下操作

FavoriteRecipe.table_name
=> "favorite_recipes"

FavoriteRecipe.attribute_names
=>  ["id", "recipe_id", "integer", "user_id", "created_at", "updated_at"] 

FavoriteRecipe.primary_key
=> "id"

FavoriteRecipe.column_names
=> ["id", "recipe_id", "integer", "user_id", "created_at", "updated_at"]

FavoriteRecipe.connected?
=> "true"

这是我的routes.rb文件

get "users/new"
  resources :recipes do
    put :favorite, on: :member
  end

  resources :users
  resources :sessions, only: [:new, :create, :destroy]

get 'static_pages/about'
get 'static_pages/contact'
get 'static_pages/help'
match '/signup', to: 'users#new', via: 'get'
match '/signin', to: 'sessions#new', via: 'get'
match '/signout', to: 'sessions#destroy', via: 'delete'

运行耙路时,这是我的输出

users_new_path           GET     /users/new(.:format)            users#new
favorite_recipe_path       PUT     /recipes/:id/favorite(.:format)   recipes#favorite
recipes_path               GET     /recipes(.:format)                recipes#index
                     POST    /recipes(.:format)                recipes#create
new_recipe_path            GET     /recipes/new(.:format)            recipes#new
edit_recipe_path           GET     /recipes/:id/edit(.:format)       recipes#edit
recipe_path                GET     /recipes/:id(.:format)            recipes#show
                     PATCH   /recipes/:id(.:format)            recipes#update
                     PUT     /recipes/:id(.:format)            recipes#update
                     DELETE  /recipes/:id(.:format)            recipes#destroy
users_path               GET     /users(.:format)                users#index
                     POST    /users(.:format)                users#create
new_user_path            GET     /users/new(.:format)            users#new
edit_user_path           GET     /users/:id/edit(.:format)       users#edit
user_path                GET     /users/:id(.:format)            users#show
                     PATCH   /users/:id(.:format)            users#update
                     PUT     /users/:id(.:format)            users#update
                     DELETE  /users/:id(.:format)            users#destroy
sessions_path            POST    /sessions(.:format)             sessions#create
new_session_path         GET     /sessions/new(.:format)         sessions#new
session_path             DELETE  /sessions/:id(.:format)         sessions#destroy
static_pages_about_path  GET     /static_pages/about(.:format)   static_pages#about
static_pages_contact_pathGET     /static_pages/contact(.:format  static_pages#contact
static_pages_help_path   GET     /static_pages/help(.:format)    static_pages#help
signup_path              GET     /signup(.:format)               users#new
signin_path              GET     /signin(.:format)               sessions#new
signout_path             DELETE  /signout(.:format)              sessions#destroy

当用户单击“显示”时,它会显示特定的配方,并具有一个链接,您可以在其中将其添加到收藏夹列表中。这是我的食谱/show.html.erb文件

<h3>Recipe</h3>
 <ul id = 'view'>
  <li><strong>Title:</strong> <%= @recipe.title %></li>
  <li><strong>Console:</strong> <%= @recipe.console %></li>
  <li><strong>Genre:</strong> <%= @recipe.genre %></li>
  <li><strong>Release Date:</strong> <%= @recipe.released_on %></li>
</ul>

<p>
<%= link_to 'Add to Favorites', favorite_recipe_path(@recipe, type: 'favorite'), method: :put, id: 'favorites' %>
</p>

<p>
  <%= link_to 'Back', recipes_path, id: 'back' %>
</p>

我在我的recipes_controller.rb文件中定义了以下方法

def favorite
  type = params[:type]
  if type == "favorite"
    current_user.favorites << @recipe
    redirect_to :back, notice: "#{@recipe.name} successfully added to your favorites!"
  elsif type == "unfavorite"
    current_user.favorites.delete(@recipe)
    redirect_to :back, notice: "#{recipe.name} removed from your favorites"
  else
    redirect_to :back, notice: 'No change'
  end
end

我很抱歉。我是Ruby的初学者,但仍然不太了解Active Record Associations。但是,一如既往的帮助将不胜感激。

达米安·罗奇(Damien Roche)

我不确定这是否反映了您的实际迁移,但这是完全错误的:

class CreateFavoriteGames < ActiveRecord::Migration
  def change
    create_table :favorite_games do |t|
      t.string :game_id
      t.string :integer
      t.string :user_id
      t.string :integer

    t.timestamps
    end
  end
end

应该:

class CreateFavoriteGames < ActiveRecord::Migration
  def change
    create_table :favorite_games do |t|
      t.integer :game_id
      t.integer :user_id
      t.integer :favorite_id

      t.timestamps
    end

    add_index :favorite_games, :game_id
    add_index :favorite_games, :user_id
    add_index :favorite_games, :favorite_id
    add_index :favorite_games, [:game_id, :user_id, :favorite_id], unique: true
  end
end

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

活动记录关联 - 错误 w has_many:通过关联?

来自分类Dev

Rails 4-控制器测试错误,活动记录关联问题

来自分类Dev

Rails活动记录查询与“ exists”的关联

来自分类Dev

Rails活动记录关联,嵌套模型

来自分类Dev

如何关联她和活动记录模型?

来自分类Dev

“ .where”查询后的活动记录关联

来自分类Dev

Rails活动记录查询与“ exists”的关联

来自分类Dev

活动记录递归多对多关联

来自分类Dev

“ .where”查询后的活动记录关联

来自分类Dev

如何仅引用活动记录关联中的持久记录

来自分类Dev

仅包括最新/最新关联记录和活动记录?

来自分类Dev

防止或捕获活动记录错误

来自分类Dev

根据特定的关联列获取唯一记录 - rails 活动记录关联

来自分类Dev

活动记录是否具有has_and_belongs_to_one关联?

来自分类Dev

二维数组高图活动记录关联

来自分类Dev

活动记录,SQL:选择并计算与联接条件的关联

来自分类Dev

Rails活动记录关联:从多个表中获取数据

来自分类Dev

Rails活动记录渴望加载不会加载关联

来自分类Dev

在Rails活动记录中创建丰富的多对多关联

来自分类Dev

从活动记录关联关系返回唯一对象

来自分类Dev

如何使用活动记录正确定义此关联?

来自分类Dev

Rails活动记录查询嵌套关联是否存在

来自分类Dev

Ruby on Rails 5,活动记录关联,仅 API

来自分类Dev

删除关联后如何保存活动记录对象?

来自分类Dev

CI活动记录。get()-> result()错误

来自分类Dev

如何使用活动记录方法获取关联的关联集合(代理集合)

来自分类Dev

Rails 4活动记录模型has_many通过关联吗?

来自分类Dev

如何从活动记录集中获取所有has_many关联

来自分类Dev

将Hangfire作业记录到Application Insights并将活动与操作ID相关联

Related 相关文章

  1. 1

    活动记录关联 - 错误 w has_many:通过关联?

  2. 2

    Rails 4-控制器测试错误,活动记录关联问题

  3. 3

    Rails活动记录查询与“ exists”的关联

  4. 4

    Rails活动记录关联,嵌套模型

  5. 5

    如何关联她和活动记录模型?

  6. 6

    “ .where”查询后的活动记录关联

  7. 7

    Rails活动记录查询与“ exists”的关联

  8. 8

    活动记录递归多对多关联

  9. 9

    “ .where”查询后的活动记录关联

  10. 10

    如何仅引用活动记录关联中的持久记录

  11. 11

    仅包括最新/最新关联记录和活动记录?

  12. 12

    防止或捕获活动记录错误

  13. 13

    根据特定的关联列获取唯一记录 - rails 活动记录关联

  14. 14

    活动记录是否具有has_and_belongs_to_one关联?

  15. 15

    二维数组高图活动记录关联

  16. 16

    活动记录,SQL:选择并计算与联接条件的关联

  17. 17

    Rails活动记录关联:从多个表中获取数据

  18. 18

    Rails活动记录渴望加载不会加载关联

  19. 19

    在Rails活动记录中创建丰富的多对多关联

  20. 20

    从活动记录关联关系返回唯一对象

  21. 21

    如何使用活动记录正确定义此关联?

  22. 22

    Rails活动记录查询嵌套关联是否存在

  23. 23

    Ruby on Rails 5,活动记录关联,仅 API

  24. 24

    删除关联后如何保存活动记录对象?

  25. 25

    CI活动记录。get()-> result()错误

  26. 26

    如何使用活动记录方法获取关联的关联集合(代理集合)

  27. 27

    Rails 4活动记录模型has_many通过关联吗?

  28. 28

    如何从活动记录集中获取所有has_many关联

  29. 29

    将Hangfire作业记录到Application Insights并将活动与操作ID相关联

热门标签

归档