javascript – 如何使用Selectize.js查找或创建rails belongs_to关联?
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了javascript – 如何使用Selectize.js查找或创建rails belongs_to关联?,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2754字,纯文字阅读大概需要4分钟。
内容图文
![javascript – 如何使用Selectize.js查找或创建rails belongs_to关联?](/upload/InfoBanner/zyjiaocheng/822/cc61a6e456e94f399cf195d2693b3d91.jpg)
我很难弄清楚如何将Selectize.js与rails中的belongs_to关联结合起来.我想做这样的照片:
我曾尝试使用accepts_nested_attributes,但这似乎不适用于belongs_to关系.
我尝试过像railscast episode这样的自动完成关联.
我真正想做的是使用Selectize样式集合select来创建“Speaker”关联(如果它已经在数据库中),但如果它尚不存在则添加一个新关联. Selectize使我能够添加一个新的,但我在通过表单传递它以在相关模型中创建新记录时遇到了麻烦.
这是我的模特:
class Quote < ApplicationRecord
belongs_to :speaker, class_name: "Artist"
belongs_to :topic, class_name: "Artist"
end
class Artist < ApplicationRecord
has_many :spoken_quotes, class_name: "Quote", foreign_key: :speaker_id
has_many :topic_quotes, class_name: "Quote", foreign_key: :topic_id
end
我的形式:
<%= f.label :speaker, 'Who said it?' %>
<%= f.collection_select :speaker_id, Artist.order(:name), :id, :name, {prompt: 'Select an artist'}, {class: 'form-control select-artist'} %>
控制器:
如何通过Quote.new表单通过Selective-style集合选择创建一个新的艺术家(作为“演讲者”)? Selectize行为是我正在寻找的用户体验,我只是无法弄清楚如何通过Quote表单创建新的艺术家.
解决方法:
如果您必须使用选择性用户体验,则可能需要使用javascript通过ajax创建艺术家/演讲者.通过selectize-rails gem,jquery-rails和一些javascript代码,您可以:
>通过ajax创建艺术家/演讲者,并将值和id分配给引号格式输入 – see demo或
>使用艺术家表单弹出一个模态,通过ajax提交表单并将值和id分配给引号表单输入
我试图使用你想要实现的基本结构来构建这个simple rails app,以向你展示选项1的一个例子.我在自述文件中包含了设置说明和演示.
所需的主要变化是:
宝石变化:
将selectize-rails和jquery-rails gems添加到Gemfile并运行bundle install.
HTML表单更改:
将选择类添加到collection_select输入标记
# /views/quotes/_form.html.erb
<%= f.collection_select :artist_id, Artist.order(:name), :id, :name, {prompt: 'Select an artist'}, {class: 'selectize'} %>
Javascript更改:
创建/assets/javascript/quotes.js并进行以下更改.
# /assets/javascript/quotes.js
$(document).on("turbolinks:load", function(){
$(".selectize").selectize({
create: function(input, callback) {
$.post('/artists.json', { artist: { name: input } })
.done(function(response){
console.log(response)
callback({value: response.id, text: response.name });
})
}
});
})
修改您的artists_controller
修改artists_controller#create action方法以便能够呈现json响应.
# POST /artists
# POST /artists.json
def create
@artist = Artist.new(artist_params)
respond_to do |format|
if @artist.save
format.html { redirect_to @artist, notice: 'Artist was successfully created.' }
format.json { render :show, status: :created, location: @artist }
else
format.html { render :new }
format.json { render json: @artist.errors, status: :unprocessable_entity }
end
end
end
您还可以观看this GoRails video以了解如何实现选项2.
内容总结
以上是互联网集市为您收集整理的javascript – 如何使用Selectize.js查找或创建rails belongs_to关联?全部内容,希望文章能够帮你解决javascript – 如何使用Selectize.js查找或创建rails belongs_to关联?所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。