我有一个Rails控制器welcome_controller.rb
,它定义了index
和commit
方法。index
方法在index.html.erb
隐式地呈现模板,该模板具有select_tag
和button_tag
。
select_tag
间接地绑定到一个模型。
在单击mybutton
时,我设置了带有JQuery的coffeescript来发送post
,并将参数传递给控制器中的commit
方法。
尽管调用了commit
方法来更新与someselecttag
绑定的模型SomeModel
,但在浏览器刷新完成之前,它不会在页面中更新。如何在视图中显示someselecttag
的更新?我意识到我可以直接从JQuery更新someselecttag
,但它不能直接从模型本身获取数据。重写此功能的可接受的"Rails"方式是什么?
控制器welcome_Controller.rb
def index
@somelist = SomeModel.all
end
def commit
params.each do |param|
SomeModel.new(param)
SomeModel.save!
end
render :nothing => true
end
查看模板index.html.erb
<%= options = options_from_collection_for_select(@somelist, 'id', 'name') %>
<%= select_tag :someselecttag, options, multiple: true %>
<%= button_tag "do stuff", :id => "mybutton" %>
Coffeescapet
$ ->
$("#mybutton").click(->
collection_of_stuff = somefunctionthatineededtousejqueryfor()
$.post "/welcome/commit", collection_of_stuff
)
commit
操作应该返回模型的更新副本(例如JSON)。然后在ajax success
上,您可以获取此模型数据并用它更新DOM。