我只是在学习Rails,并希望得到任何帮助。我已经在form_for
上查看了:remote => true
的10个教程,它们似乎都是相互复制的(同样令人困惑)。:remote =>真正的混淆与form_for
本教程是其中之一:http://tech.thereq.com/post/18910961502/rails-3-using-form-remote-true-with-jquery-ujs
我的web应用程序是几乎所有在一个页面上,和我的“提交表单”是一个弹出式灯箱内。这意味着form_for代码实际上在我的index.html.erb中。这也意味着index
创建一个新的@playlist实例变量(而不是有这是new
)
我的最终目标是这样的:
if @playlist.save
回报true
,我想将用户重定向到root_path
WITH a:notice。没有必要用成功消息或类似的东西来更新表单。我想要保存成功的硬重定向。
if @playlist.save
返回false
,我想渲染create.js.erb中的代码,它会将错误追加到lightbox窗体中而不刷新页面。 note很多教程似乎都希望将整个表单重新渲染为html,然后替换内容。我宁愿(如果可以的话),只是将错误发送到表单并插入它们,我认为重新渲染和替换整个表单似乎比它更复杂。
截至目前,我的代码是一种糊涂的,尤其是:
- 的
respond_to
块。这是关于什么实际上在这里混淆最大的一点,我已经尝试了很多不同的代码,没有任何作品 - 我不知道如果create.js.erb是正确的
- 我没有create.html.erb - 我认为这是正确的,因为我只是想我的重定向形式的
第一行:
<%= form_for @playlist, :remote => true do |f| %>
我的整个PlaylistsController
class PlaylistsController < ApplicationController
before_filter :load_genres, :only =>[:index, :user]
before_filter :new_playlist, :only => [:index, :new, :create]
def index
@playlists = Playlist.order('created_at DESC').page(params[:page]).per(30)
end
def new
end
def create
respond_to do |format|
if @playlist.save
# ???
format.html { redirect_to root_path, :notice => "Playlist submitted" }
else
# ???
format.js { render :js => @playlist.errors, :status => :unprocessable_entity }
end
end
end
def user
@playlists = Playlist.order('created_at DESC').where(:username => params[:username]).page(params[:page]).per(30)
end
def listen
playlist = Playlist.find(params[:playlist_id])
playlist.update_attribute(:listens, playlist.listens + 1)
render :nothing => true
end
private
def load_genres
@genres = Genre.order(:name)
end
def new_playlist
@playlist = Playlist.new(:title => params[:title], :url => params[:url], :description => params[:description])
end
end
create.js.erb
jQuery(function($) {
alert('createjs called');
$('#submit-form form').on('ajax:error', function(event, xhr, status, error){
var responseObject = $.parseJSON(xhr.responseText),
errors = $('<ul />');
$.each(responseObject, function(index, value){
errors.append('<li>' + value + '</li>');
})
$(this).find('.submit-playlist-errors').html(errors);
});
});
我其实是有点困惑你使用,你需要达到什么样的挣扎什么。什么工作,什么不是。你能简化和打破你的问题吗? – simonmorley
相信我我曾试图在其他论坛和其他论坛上将其分解。这很难解释,我试图让它真正清楚我在找什么。截至目前,它只是没有工作,时期。我知道这个问题是我的respond_to块,这主要是因为我不明白它和所有我读过的教程混淆了这个话题 – Tallboy
我已经意识到一个错误是,我有这样的:'@playlist = Playlist.new( :title => params [:title],:url => params [:url],:description => params [:description])'。它应该是'params [:播放列表]'。我会在一瞬间给出确切的错误 – Tallboy