我有一个提交表单,显示在灯箱中。我对表单进行了大量验证,但是在某些情况下已经提交了播放列表,在这种情况下我无法在提交表单之前告知。
目前我有:disable_with => 'Submitting...'
如果将错误发送回表单,并且提交按钮将重新启用,那将非常棒。
这可以在没有太多复杂情况的情况下实现吗?
我还有第二个相关的问题...因为我的表单在灯箱中,它的代码实际上是在索引页面上(我的应用程序只是一页)。这意味着确实没有“新”操作,而是我的索引操作中的@playlist = Playlist.new(:title => ...)
(以及@playlists = Playlist.all
等)。在我的路线中,我这样做了:resources :playlists, :only => [:create]
这听起来跟我做的一样吗?
编辑:他是一些代码,虽然它基本上就像你想象的那样简单。
以下类型的作品......如果播放列表有效,则创建播放列表,否则无效。两次调用create.js.erb ..我现在不知道如何使这项工作完成。在成功我需要关闭窗口,失败时我需要将错误加载到已经在屏幕上的表格。我不知道那是怎么回事:/
before_filter :load_genres, :only =>[:index, :user]
before_filter :new_playlist, :only => [:index, :new]
def index
@playlists = Playlist.order('created_at DESC').page(params[:page]).per(30)
end
def create
@playlist = Playlist.new(params[:playlist])
respond_to do |format|
if @playlist.save
format.html { redirect_to root_path, :notice => "Playlist submitted" }
format.js {}
else
format.html { render :action => :new, :layout => !request.xhr? }
format.js {}
end
end
end
def new
end
def load_genres
@genres = Genre.order(:name)
end
def new_playlist
@playlist = Playlist.new(:title => params[:title], :url => params[:url], :description => params[:description])
end
第一个喜欢我的表单(位于index.html.erb中):
<%= form_for @playlist, :remote => true do |f| %>
我目前在create.html.erb
答案 0 :(得分:1)
这是我对这个问题的解决方案....我把它们放在我所有的js.erb文件中
$('#flash').html("<%= escape_javascript raw(flash_display) %>");
有了这个助手
def flash_display
response = ""
flash.each do |name, msg|
response = response + content_tag(:div, msg, :id => "flash_#{name}")
end
flash.discard
response
end
这适用于已经在布局中设置的flash div
<div id="flash">
<% flash.each do |name, msg| %>
<%= content_tag :div, msg, :id => "flash_#{name}" %>
<% end %>
</div>
希望这有助于
答案 1 :(得分:0)
如果没有看到您的代码,我只能提出广泛的建议。
一种是设置对控制器动作的js.erb响应 - 或者你可以在HTML中的if子句中执行js脚本标记。无论哪种方式,您都可以使用jQuery来更新元素。
在js / html erb文件中:
jQuery('#flash_area).html(<flash message>);
视图中的Flash区域需要flash_area
的ID(或者您想要命名的任何内容)。