【发布时间】:2019-09-19 01:12:23
【问题描述】:
我有一个 Rails 方法可以转换日期输入并返回一个数字。我花了一些时间来创建它,所以我想继续使用它。未存储数据。我想做的是创建一个简单的 JS 输入来获取数据并通过方法发送。
所以本质上我的方法是这样的:
def date_converter(user_number)
blah blah blah
if blah < 2069
error
els if blah > 2069
convert user_number.year
else
this number
end
end
然后在我的 HTML 中我有一个基本的 JS 输入:
<p> Enter in Date </p>
<input id="check_number">
<button type="button" onclick="numberFunction()">Submit</button>
<p id="demo"></p>
<script>
function numberFunction() {
var x, dispay_value;
x = document.getElementById('check_number').value;
document.getElementById('demo').innerHTML = display_value;
}
</script>
所以我需要通过该方法发送 x,然后将结果发送到 innerHTML。使用 Ajax,我使用该方法更新了我的 PostsController,但取消了参数。我创建了一条路线:
post 'posts/date_converter' => 'posts#date_converter'
然后在我的帖子 > 显示我更新了脚本:
function numberFunction() {
user_number = $('check_number').val();
$.ajax({
url: 'week_date',
type: 'GET',
dataType: 'html',
data: {
number: user_number,
}
}).done(function(res) {
$('#demo').html(res);
});
}
我结束了
ActiveRecord::RecordNotFound(找不到带有 'id'=date_converter 的帖子):
我认为这可能是使用 Post 的路线问题,所以我尝试使用 Get。同样的问题。尝试将其放入它自己的部分并在 Post > Show 和相同的问题上呈现部分。
编辑:所以我做了一些额外的改变。我保留了这条路线。添加到ajax请求:
beforeSend: function(xhr) {xhr.setRequestHeader('X-CSRF-Token', $('meta[name="csrf-token"]').attr('content'))}
我更新了控制器以拉入当前帖子 (@post = Post.find(params[:id])),即使我不想将它绑定到当前帖子,然后将路线更新为:
get '/posts/:id/week_date' => 'posts#week_date'
所以当我运行它时,我得到:
ActiveRecord::RecordNotFound(找不到带有 'id'=posts 的帖子)
如果我将 ajax 请求更改为特定的 url,例如:
url: '1/date_converter'
这不是我想要的,我最终得到了
NameError(未定义的局部变量或方法 `user_number'
总而言之,如果我在我的 ajax 请求中使用特定 ID - 这与我想要的相反,那么它甚至不会将值传递给局部变量。
【问题讨论】:
-
您的要求并不完全清楚。如果您想提交表单,请按照您现在的方式进行。如果您说您要发出一个执行 just 的 Ajax 请求,然后创建一个接收其输入并返回输出的路由,然后通过(您喜欢的任何 Ajax 机制)发出该请求并处理结果。
-
如何将 JS 上的输入传递给 helper 中的 rails 方法? Rails 端没有表格/模型。该方法只是一个助手。因此,创建一个 rails 表单需要构建它和一个控制器。只需将输入值传递给方法。
-
你不能。除非您将其提交给控制器操作并以这种方式提交给您的辅助方法。