簡體   English   中英

Form_for不適用於JS / JQuery

[英]Form_for doesn't work with JS/JQuery

當我將JavaScript與表單一起使用時,我無法使它正常工作。 如果沒有將remote選項設置為true,那么一切正常,但是一旦我將其設置,更改控制器並創建所需的JS文件,它就會生成一個

POST .. 500 Internal Server Error

單擊提交按鈕時。

此外,回復預覽顯示了一個Rails錯誤頁面,上面寫着

NoMethodError in Vocabs#createundefined 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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM