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 非常有趣。你可以实现你想要的。而且代码会更清晰。
我没有要评论的地方,这就是我给出这个作为答案的原因。
我在 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 非常有趣。你可以实现你想要的。而且代码会更清晰。
我没有要评论的地方,这就是我给出这个作为答案的原因。