Ruby on rails 在类别中放置论坛(Rails 4)

Ruby on rails 在类别中放置论坛(Rails 4),ruby-on-rails,ruby,migration,ruby-on-rails-4,Ruby On Rails,Ruby,Migration,Ruby On Rails 4,我正在使用RubyonRails创建一个论坛(我在这方面是个新手),我已经完全陷入了困境 **RubyonRails 4.0版** 一个论坛软件可以有很多类别,在这些类别中你可以有多个论坛 主页的外观与此类似: 第一类 论坛1 论坛2 第2类 论坛3 论坛4 论坛5 当你创建一个论坛时,你应该有一个下拉菜单,允许你选择你想把它放在哪个类别 起初,我创建了两个不同的框架——一个用于分类,另一个用于论坛。我用外键将两者连接起来。我不知道这是否是最好的方法,但我根本无法让他们互动。最后我把代码

我正在使用RubyonRails创建一个论坛(我在这方面是个新手),我已经完全陷入了困境

**RubyonRails 4.0版**

一个论坛软件可以有很多类别,在这些类别中你可以有多个论坛

主页的外观与此类似:

第一类

  • 论坛1
  • 论坛2
第2类

  • 论坛3
  • 论坛4
  • 论坛5
当你创建一个论坛时,你应该有一个下拉菜单,允许你选择你想把它放在哪个类别

起初,我创建了两个不同的框架——一个用于分类,另一个用于论坛。我用外键将两者连接起来。我不知道这是否是最好的方法,但我根本无法让他们互动。最后我把代码搞得一团糟,没什么可展示的

我尝试使用和来寻找解决方案,但最终都导致了错误

这是我的一些代码。虽然不多,但也许你可以告诉我从哪里开始。如果有更好的方法(不使用两张桌子),请告诉我。我很想听到在不使用gems的情况下执行此操作的最佳方法

警告:我的代码乱七八糟

迁移

    class AddForeignToForums < ActiveRecord::Migration
      def change
        add_column :forums, :category_id, :integer
      end
    end
论坛模式

class Forum < ActiveRecord::Base
  belongs_to :category
end
 class Category < ActiveRecord::Base
    has_many :forums, :dependent => :destroy, 
 end
class论坛
类别模型

class Forum < ActiveRecord::Base
  belongs_to :category
end
 class Category < ActiveRecord::Base
    has_many :forums, :dependent => :destroy, 
 end
类别:销毁,
结束
Category Index.html.erb

  <tbody>
    <% @categories.each do |category| %>
      <tr>
        <td><%= link_to category.name, category %></td>
        <td><%= link_to ' (Edit', edit_category_path(category) %></td>
        <td><%= link_to '| Destroy)', category, method: :delete, data: { confirm: 'Are you sure?' } %></td>
      </tr>

      <% category.forums.each do |forum| %>
        <tr>
          <td><li><%= link_to forum.name, forum %></li></td>
        </tr>
      <% end %>
    <% end %>
  </tbody>
<%= form_for(@forum) do |f| %>
<div class="field">
  <%= f.label :name %><br>
  <%= f.text_field :name %>
</div>
<div class="field">
  <%= f.label :description %><br>
  <%= f.text_area :description %>
</div>

<%= f.label :category_id %><br />
<%= f.select :category_id, Category.all.map{|c| [c.name, c.id]} %>

<div class="actions">
  <%= f.submit %>
</div>

  • Forum\u form.html.erb

      <tbody>
        <% @categories.each do |category| %>
          <tr>
            <td><%= link_to category.name, category %></td>
            <td><%= link_to ' (Edit', edit_category_path(category) %></td>
            <td><%= link_to '| Destroy)', category, method: :delete, data: { confirm: 'Are you sure?' } %></td>
          </tr>
    
          <% category.forums.each do |forum| %>
            <tr>
              <td><li><%= link_to forum.name, forum %></li></td>
            </tr>
          <% end %>
        <% end %>
      </tbody>
    
    <%= form_for(@forum) do |f| %>
    <div class="field">
      <%= f.label :name %><br>
      <%= f.text_field :name %>
    </div>
    <div class="field">
      <%= f.label :description %><br>
      <%= f.text_area :description %>
    </div>
    
    <%= f.label :category_id %><br />
    <%= f.select :category_id, Category.all.map{|c| [c.name, c.id]} %>
    
    <div class="actions">
      <%= f.submit %>
    </div>
    
    
    



    您可能需要一个论坛表、一个类别表和一个包含论坛id和类别id的联接表-将此论坛命名为类别

    class Forum < ActiveRecord::Base
    
      has_many :forum_categories
      has_many :categories, :through => :forum_categories
    
    end
    

    这将以数组格式提交一个参数,允许您使用简单的

    forum.create(params[:forum])
    
    在您的视图中,您将列出category.forums,而不是@forums

      <% category.forums.each do |forum| %>
        <%= forum.name %>
      <% end %>
    

    如果关系不是多对多,我还会想要一个联接表吗?我数据库的这部分是一对多的关系,因为论坛只能被分配到一个类别。对不起,我误解了。你对分类id没问题。我在答案上加了一点。
    class Category < ActiveRecord::Base
    
      # belongs_to :category - this can be removed
      has_many :forums # Do you want to delete the forums if the category is removed?  You don't need the classname option.
    
    end
    
    f.select :category_id, Category.all.map{|c| [c.name, c.id]}