Ruby on rails Rails引导\表单集合选择
我正试图让我的引导程序\u表单集合\u select工作,但我遇到了一些困难。我使用引导4作为上下文 我有一个标签集合,我希望用户能够选择多个标签添加到单个事件中。我无法选择多个标记。当前,“选择”对话框将显示,其中包含“选择”对话框中的有效选项。我的提交也有问题 _form.html.erb:Ruby on rails Rails引导\表单集合选择,ruby-on-rails,ruby,Ruby On Rails,Ruby,我正试图让我的引导程序\u表单集合\u select工作,但我遇到了一些困难。我使用引导4作为上下文 我有一个标签集合,我希望用户能够选择多个标签添加到单个事件中。我无法选择多个标记。当前,“选择”对话框将显示,其中包含“选择”对话框中的有效选项。我的提交也有问题 _form.html.erb: <%= f.collection_select :tags, Tag.all, :id, :name, hide_label: true, options: { placeholder: "Ta
<%= f.collection_select :tags, Tag.all, :id, :name, hide_label: true, options: { placeholder: "Tag Id", multiple: true}, html_options: { input_group_class: 'input-group-lg' } %>
Event.rb模型:
class Event < ApplicationRecord
has_many :user_event_relationships
has_many :users, through: :user_event_relationships
has_and_belongs_to_many :tags
has_one_attached :picture
validates :name, :location, :date_to, :date_from, presence: true
validate :valid_date_range_required
end
我解决了这个问题!我不得不在event_params中不允许标记作为参数,如下所示:
params.require(:event).permit(:name, :date_from,
:location, :date_to, :description, :picture)
相反,我在create controller中编写了一些代码,从tags字段中找到了标记,然后将它们添加到@event.tags中
这是代码:
def create
tags = Tag.find(params.require(:event)['tags'])
#puts "Params: #{params}"
@event = Event.new(event_params)
respond_to do | format |
if @event.save
results = Geocoder.search(@event.location)
lat, long = results.first.coordinates
@event.location_lat = lat
@event.location_long = long
tags.each {|tag|
@event.tags << tag
}
#@event.save
UserEventRelationship.create(event_id: @event.id, user_id: current_user.id, role_type_id: 0)
format.html { redirect_to @event, notice: 'Event was successfully created.' }
format.json { render json: @event, status: :created, location: @event }
else
format.html {render 'new'}
format.json {render json: @event.errors, status: :unprocessable_entity }
end
end
end
事件控制器中的第30行是哪一行?@event=event.newevent_参数如果是引导问题,请显示整个_form.html.erb。还有,这些标签是用来做什么的?你能把你的整个控制器文件贴出来吗。您的event_params方法似乎有问题
class CreateJoinTableEventsTags < ActiveRecord::Migration[6.0]
def change
create_join_table :events, :tags do |t|
t.index [:event_id, :tag_id]
t.index [:tag_id, :event_id]
end
end
end
NoMethodError - undefined method `each' for "10":String:
app/controllers/events_controller.rb:30:in `create'
params.require(:event).permit(:name, :date_from,
:location, :date_to, :description, :picture)
def create
tags = Tag.find(params.require(:event)['tags'])
#puts "Params: #{params}"
@event = Event.new(event_params)
respond_to do | format |
if @event.save
results = Geocoder.search(@event.location)
lat, long = results.first.coordinates
@event.location_lat = lat
@event.location_long = long
tags.each {|tag|
@event.tags << tag
}
#@event.save
UserEventRelationship.create(event_id: @event.id, user_id: current_user.id, role_type_id: 0)
format.html { redirect_to @event, notice: 'Event was successfully created.' }
format.json { render json: @event, status: :created, location: @event }
else
format.html {render 'new'}
format.json {render json: @event.errors, status: :unprocessable_entity }
end
end
end