[英]Form_for doesn't work with JS/JQuery
當我將JavaScript與表單一起使用時,我無法使它正常工作。 如果沒有將remote選項設置為true,那么一切正常,但是一旦我將其設置,更改控制器並創建所需的JS文件,它就會生成一個
POST .. 500 Internal Server Error
單擊提交按鈕時。
此外,回復預覽顯示了一個Rails錯誤頁面,上面寫着
NoMethodError in Vocabs#create
和undefined method > for nil:NilClass
在相關的部分(在使用JS之前效果很好)
形式(vocabs / _new_form.html.erb)如下所示:
<%= form_for @vocab, remote: true do |f| %>
<%= render 'fields', f: f %>
<%= f.submit "Add", class: "btn btn-large btn-primary" %>
<% end %>
vocab_controller的創建動作如下:
def create
@user = current_user
@vocab = current_user.vocabs.build(vocab_params)
@vocabs = @user.vocabs.paginate(page: params[:page])
respond_to do |format|
format.html {
if @vocab.save
flash.now[:success] = "Vocab created!"
redirect_to root_url
else
flash.now[:error] = "Vocab not saved!"
render 'new'
end
}
format.js
end
end
create.js.erb像這樣:
$('#new_vocab').remove();
當然,我想做的不僅僅是刪除表單,而且由於我什至沒有設法做到,所以我想保持簡單。
_fields.html.erb:
<%= render 'shared/error_messages', object: f.object %>
<div class="field">
<%= f.label :nl_word, @user.native_language %>
<%= f.text_field :nl_word %>
<%= f.label :fl_word, @user.foreign_language %>
<%= f.text_field :fl_word %>
<%= f.label :tag, "Your Tag" %>
<%= f.text_field :tag%>
<%= f.label :importance, "Importance" %>
<%= f.select(:importance, options_for_select(
StaticData::IMPORTANCE_SEED, :selected => f.object.importance)) %>
</div>
我希望我能解釋自己足夠好,可以在這里得到一些幫助。 我花了數小時試圖自己找到解決問題的方法,並在這里尋找類似的問題,但沒有找到任何問題,卻一無所獲。
在一個朋友的幫助下,我發現主要的問題是,在使用JS處理時,我沒有為我想以(_new_form.html.erb)格式創建的vocab對象提供任何驗證。
所以我將vocab_controller.rb更改為
def create
@user = current_user
@vocab = current_user.vocabs.build(vocab_params)
@vocabs = @user.vocabs.paginate(page: params[:page])
respond_to do |format|
if @vocab.save
flash.now[:success] = "Vocab created!"
format.html do
redirect_to root_url
end
format.js
else
flash.now[:error] = "Vocab not saved!"
format.html do
render 'new'
end
format.js
end
end
end
這樣就可以了,我的表單現在可以與JS一起使用。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.