我的数据库有一个游戏列表和每个游戏中角色的联结表。我的问题是,如何在下拉列表中显示游戏列表,并且当选择游戏时在另一个下拉列表中显示角色?如果选择另一个游戏,我也会尝试让角色改变。我没有关联,因为我已经在数据库级别创建了所有关系。它们都在数据库级别,因为我有多个应用程序从同一个数据库读取。我找到的所有答案都设置了关联。如何在没有关联的情况下完成此任务,或者我只需要咬紧牙关并添加它们?
答案 0 :(得分:0)
不完全确定你要问的是什么。你肯定需要联想。角色需要属于游戏。您可以在游戏选择框的on change
事件中填充第二个选择框。当选择游戏时,触发ajax调用,该调用使用游戏中的角色填充另一个选择框。这基本上是你需要做的。
填充游戏选择框。
f.select(:game_id, options_for_select([["game name", game_id], ["game 2", game_id_2]]))
在更改时,触发对自定义控制器操作的ajax调用,该操作会在游戏选择框中传递所选值的ID。
$(document).on("change", "#game_id_selector", function(e){
e.preventDefault()
$.ajax({
type: "POST",
url: "games/get_characters",
data: {
game_id: $("#game_id_selector").val()
}
}).done(function(ajax_response){
// append the characters to the other select box using .append()
})
})
准备好自定义控制器操作和相应的路径。
resources :games do
collection do
post "get_characters"
end
end
def get_characters
game = Game.find(params[:game_id])
characters_arr = []
game.characters.each {|char| characters_arr << [char.name, char.id] }
render json: {data: characters_arr}
end
在控制器内部操作中,收集与该游戏相关的所有角色。
基本上,这是你需要做的。而且你需要角色属于游戏才能做到。