我有一个应用程序,用户的投资组合有很多位置,每个位置都有很多动作。因此,特定位置的关联移动索引页面的URL看起来像:portfolio_position_movements。我有一个索引页面,控制器操作看起来像
def index
@movements = @position.movements.all
respond_to do |format|
format.html
format.json { render json: @movements}
end
end
我的moves.js文件中的ajax调用是:
var loadData = function(){
$.ajax({
type: 'GET',
contentType: 'application/json; charset=utf-8',
url: ?,
dataType: 'json',
success: function(data){
drawBarPlot(data);
},
failure: function(result){
error();
}
});
};
如何传递动态路径路径,以便在任何位置对象上使用移动索引?
答案 0 :(得分:0)
你可以在js文件中使用erb标签,对我来说,我按照以下方式使用:
#edit.js.erb
$modal = $('.modal'),
$modalBody = $('.modal .modal-body'),
$modalHeading = $('.modal .modal-heading');
$modalHeading.html("Edit <%= @student.full_name.titleize %>'s information");
$modalBody.html("<%= escape_javascript(render 'edit_student') %>");
$modal.modal();
注意:文件扩展名为.js.erb
,因此rails可以处理它。我正在调用一个模态表单,student_controller.rb中的edit方法是:
def edit
@student = Student.find(params[:id])
respond_to do |format|
format.html # edit.html.erb
format.js # edit.js.erb
format.json { render json: @student }
end
end
编辑:
您可以将JS代码嵌入到html.erb中并使用rails路由,例如:
<script>
var loadData = function(){
$.ajax({
type: 'GET',
contentType: 'application/json; charset=utf-8',
url: <%= my_ajax_path %>,
dataType: 'json',
success: function(data){
drawBarPlot(data);
},
failure: function(result){
error();
}
});
};
</script>
什么是my_ajax_path?
是routes.rb
中定义的铁路路线,例如我需要一个学生可以申请使用ajax的所有可用部分的列表,所以我做了以下工作:
1-在students_controllers.rb中定义了一个方法,如下所示:
def available_sections
batch_id = (params[:batch_id].nil? || params[:batch_id].empty?) ? 0 : params[:batch_id].to_i
if batch_id == 0
@sections = [].insert(0, "Select Section")
else
batch = Batch.find(params[:batch_id])
# map to name and id for use in our options_for_select
@sections = batch.sections.map{|a| [a.section_name, a.id]}
end
end
2-在routes.rb
resources :students do
collection do
get :available_sections
post :create_multiple
end
end
3-内部new.html.erb:
<script type="text/javascript">
$(document).ready(function() {
$('.student_section_id').hide();
$('#student_batch').change(function() {
$.ajax({
url: "/students/available_sections",
data: {
batch_id : $('#student_batch').val()
},
dataType: "script",
success: function () {
if (+$('#student_batch').val() > 0)
{
$('.student_section_id').fadeIn();
}
else
{
$('.student_section_id').fadeOut();
}
}
});
});
});
</script>
忘记那些凌乱的代码:D因为这是我的第一步,但是你得到了重点,对于这一行url: "/students/available_sections"
它应该使用rails路由你可以通过调用rails routes
来获取它命令行以获取所有应用程序路由的列表