我对 Rails 非常陌生,所以我认为我的问题很简单。我本质上在视图页面上有一个对象提交按钮(因此为指定的对象运行创建和保存)但是在选择按钮时我根本不希望视图改变(所以只保留已加载的同一页面)。我在我的对象控制器中编辑创建操作时遇到问题,因此视图不会发生任何事情(这甚至可能吗?或者是每个操作都必须出现一个新视图的想法)。
感谢你的帮助!丽莎
我对 Rails 非常陌生,所以我认为我的问题很简单。我本质上在视图页面上有一个对象提交按钮(因此为指定的对象运行创建和保存)但是在选择按钮时我根本不希望视图改变(所以只保留已加载的同一页面)。我在我的对象控制器中编辑创建操作时遇到问题,因此视图不会发生任何事情(这甚至可能吗?或者是每个操作都必须出现一个新视图的想法)。
感谢你的帮助!丽莎
这可以通过在控制器中创建一个动作来完成,
class YourController < ApplicationController
def index
end
def youraction
end
end
,然后在 routes.rb 中设置一个路由到它
然后只需将您的表单设置为指向该网址并添加
remote: true
表单标签的选项。
所以你想存储对象并且你不想改变 URL。
在您的创建操作中,在保存对象之后。重定向到该视图。
所以像:
$ if @object.save
redirect_to :action => "index"
# or
# redirect_to object_path # you can set this in config/routes.rb
# or
# redirect_to :action => "show", :id => @object.id
您可以通过使用 ajax 请求来做到这一点:
在你的控制器中创建一个动作来创建你想要的对象:
class SomeController < ApplicationController
def index
#this is your view controller
end
def youraction
#create an object
render :nothing => true
end
end
然后将您的按钮与执行 ajax 请求的 javascript 函数绑定:
HTML
<button id="submit_button">Submit</button>
Javascript
$(document).ready(function (){
$('#submit_button').click(function(){
$.ajax({
url: 'url_to_the_controller/youraction',
type: 'POST'
success: function (){
alert('success');
},
error: function (){
alert('error');
}
});
});
}