Rails form_for,创建带有分类的事件

Rails form_for, creating event with categorization

我在 rails 上对 ruby 有点陌生,我一直在阅读有关协会的文档,而且我一直很轻松(通常很快 google搜索解决了我的大部分疑问)但是最近我遇到了一件看似容易的事情。

我想做的是创建一个链接到现有类别的事件。

事件模型

class Event < ApplicationRecord

  has_many :categorizations
  has_many :categories, through: :categorizations
  accepts_nested_attributes_for :categorizations
  .
  .
  .
end

类别模型

class Category < ApplicationRecord
  has_many :categorizations
  has_many :events, through: :categorizations
end

分类模型

class Categorization < ApplicationRecord
  belongs_to :event
  belongs_to :category
end

事件控制器

class EventsController < ApplicationController

def new
    @event = Event.new
end

def create
    @user = User.find(current_user.id)
    @event = @user.events.create(event_params)
    if @event.save
      redirect_to root_path
    else
      redirect_to root_path
    end
end

private

    def event_params
      params.require(:event).permit(:name, category_ids:[])
    end

这是表格,我认为问题出在这里:

<%= form_for @event, :html => {:multipart => true} do |f| %>

<%= f.label :name %>
<%= f.text_field :name %>

<%= f.fields_for :categorizations do |categories_fields|%>
  <% categories = [] %>
  <% Category.all.each do |category| %>
    <% categories << category.name %>
  <% end %>

  <%= categories_fields.label :category_id, "Category" %>      
  <%= categories_fields.select ( :category_id, categories) %>

<% end %>

.
.
.


<%= f.submit "Create"%>

<% end %>

我之前用一些类别填充了类别数据库,所以剩下要做的是在创建事件时,还创建一个链接到新事件和所选分类的分类。但我尝试过的事情似乎没有用。

其他事情似乎工作正常,每当我尝试提交事件时,除分类外,所有内容都按预期填充。

正如您所说,您是 rails 的新手,您会发现这个 cocoon gem 非常有趣。你可以实现你想要的。而且代码会更清晰。

我没有要评论的地方,这就是我给出这个作为答案的原因。