当我使用JavaScript时,我在使用表单时遇到问题。 如果没有将远程选项设置为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>
我希望我能够解释自己在这里得到一些帮助。我试了几个小时自己找到问题的解决方案,并在这里寻找类似的问题而没有找到任何东西,没有得到任何地方。
答案 0 :(得分:0)
在一位朋友的帮助下,我发现主要的问题是我没有为我想要在表单中创建的词汇对象(_new_form.html.erb)提供任何验证,当处理它时JS。
所以我将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。