我只是在學習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