Rails 5 - Simple_form和has_one association

时间:2017-03-26 02:07:38

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

模型/视频

class Video < ApplicationRecord
  has_one :category, through: :video_category
  has_one :video_category
end

模型/分类

class Category < ApplicationRecord
  has_many :video_categories
  has_many :videos, through: :video_categories
end

一个视频只能包含一个类别,但一个类别包含多个视频。

我让用户发布视频链接,让他们为每个视频选择最佳类别。我在管理员中创建了一些类别,他们只能使用我创建的类别。

视图/视频/新

<%= simple_form_for @new_video do |f| %>
   <%= f.input :title %>
   <%= f.input :description, as: :text %>
   <%= f.input :category,
               as: :select,
               label: "Category" %>
   <%= f.button :submit, "Submit", class:"btn btn-danger post-button-form" %>
<% end %>

我可以选择&#34;是&#34;而不是类别。或&#34;否&#34; 我不能使用f.associations而不是f.input,因为我有一个错误,说我不能使用&#34; has_one&#34;关系。

我该怎么办?我真的卡住了:(

谢谢

1 个答案:

答案 0 :(得分:1)

由于你在这里使用has_many_through进行这种简单的关联(据我所知),它有点过于复杂。如果没有第三个模型(VideoCategory),您可以简单地使用正常的1对多关联。但在你的情况下:

  1. VideoContrller:
  2. params.require(:video).permit(:name, :description, video_categories_attributes: [:id, :foo, :bar])

    1. video.rb:
    2. accepts_nested_attributes_for :video_category

      1. 数据库表必须包含:
      2. videos:
         video_category_id:integer
        categories:
         video_category_id:integer
        video_categories:
         video_id:integer
         category_id:integer
        
        1. 现在,您可以从Video cotroller设置或创建VideoCategory记录。试试控制台:
        2. Video_category.create!

          Video.last.video_category = 1

          但我认为对于你的情况,在没有JoinedModel的情况下简单地使用一对多关联会更容易。

          希望这能让你顺利进入。