使用 jQuery/JavaScript 将变量传递给 Rails 中的 Ruby on Rails
Using jQuery/JavaScript to pass variables to Ruby on Rails, within Rails
使用
Ruby on Rails,并在需要时使用 jQuery/JavaScript。 当我需要收集信息并将其传递回 Rails 时,我在 JS 方面遇到了一个特别的问题。 此时,我使用 POST 发送信息。 一个例子是:
$('#moveslotsbutton').on('click', function () {
var source = 'lots';
var rows = [];
var rowi = -1;
$.each(moveslotstable.rows('.active').data(), function (i, val) {
$(rowi = rowi + 1, rows[rowi] = val[0])
});
$.post('/moves_update',
{
commit: 'Moves Lots',
source: source,
active: rows
}
);
return false;
});
在这里,我需要收集一系列信息以发送到"活动"的Rails。 这允许用户从表中选择多行,并使用"活动"数组以及一些解释性标量提交它进行处理。
这里的问题似乎是Rails并不真正知道发生了什么,因此无法在逻辑上做出响应。 实际上,呈现器的功能是返回 HTML 状态 200,但屏幕在任何情况下都不会更新。 为了得到响应,我需要返回JS,如下所示:
def update
commit = params[:commit]
case commit
when "Moves Lots"
lots = params[:active]
@rows = Array.new
lots.each { |lot| @rows = @rows + Lot.lot_rows(lot) }
render js: "window.location.assign(location.origin + '/moves_indexrows')"
else
flash[:alert] = "Invalid request: #{commit}"
result = [false, "Processing Error"]
end
end
然后,这会使用操作"索引行"触发控制器"移动"。 但是,由于我要回到 JS,因此它不知道@rows,因此无法在以下视图中使用它。 (操作索引行最初是索引的一部分,我只是把它拉出来以更好地理解它。
我看过使用 JS submit((,这会让它保持在 Rails 中,但它不会传递所需的变量? 有没有办法做我正在尝试做的事情,这意味着创建JS变量并将其传递给Rails,并让Rails控制该过程? 我错过了什么吗? 谢谢。
你可以
这样做,
$('#moveslotsbutton').on('click', function () {
var source = 'lots';
var rows = [];
var rowi = -1;
$.each(moveslotstable.rows('.active').data(), function (i, val) {
$(rowi = rowi + 1, rows[rowi] = val[0])
});
//changing $.post to $.ajax and then handling the response in success callback.
$.ajax({
url: '/moves_update',
method: 'post',
data:{
commit: 'Moves Lots',
source: source,
active: rows
},
success: function(data){
//the response 'data' contains rows within it
window.location.assign(location.origin + '/moves_indexrows');
}
});
return false;
});
在控制器中:
def update
commit = params[:commit]
case commit
when "Moves Lots"
lots = params[:active]
@rows = Array.new
lots.each { |lot| @rows = @rows + Lot.lot_rows(lot) }
# rendering @rows in json
render text:@rows.to_json
else
flash[:alert] = "Invalid request: #{commit}"
result = [false, "Processing Error"]
end
end
相关文章:
- 如何从rails中的代码中删除新行( )
- Jquery:代码在rails中的页面加载时未执行
- Jquery append oly获取循环Rails中的最后一个elemen
- 通过rails中的Ajax在控制器B的每个视图中渲染控制器a的视图
- 如果不刷新Rails中的浏览器,AJAX请求就无法看到效果
- 更新'喜欢'使用Ajax的Rails中的计数
- 按钮,用于更改Rails中的数据库值
- 如何刷新rails中的特定页面
- 将变量从link_to传递到rails中的模态
- 通过Rails中的自定义Jquery对话框处理链接的确认
- 用于显示索引视图 Rails 中的页面的下拉链接
- 将参数传递给 Rails 中的选择更改
- 将参数传递给Rails中的onchange事件
- 使用rails中的ajax请求更新DB
- Rails中的共享JS(Coffee)
- Javascript/JQuery中的本地语言类似于Rails中的本地语
- 尝试使用Backbone.sync从Rails中的动作控制器获取数据-非restful
- 如何使用Ajax更新Rails中的Button
- 根据Rails中的下拉框值自动填充文本字段
- 在从ruby on rails中的资产管道加载的布局上链接Javascript函数