我有一个while(1) {
ADCON0 = 0b10000011; // select channel and start AD conversion cycle
__delay_ms(10);
A = ((ADRESH <<8)+ ADRESL);
for(i=(1<<9);i!=0;i>>=1) { // controlla i singoli bit
if ((j & i) == 1) { // se = 1, manda un segnale sul canale GP5
GPIObits.GP5 = 1;
__delay_ms(250);
GPIObits.GP5 = 0;
__delay_ms(250);
}
if ((j & i) == 0) { // se = 1, manda un segnale sul canale GP4
GPIObits.GP4 = 1;
__delay_ms(250);
GPIObits.GP4 = 0;
__delay_ms(250);
}
__delay_ms(1000);
}
}
gem的Rails 5.2.0应用程序。在下面的设置中,我将使用AJAX表单创建一个新的simple_form
。我可以创建一个新记录。
但是,当表单验证失败(标题和正文属性)时,它将重新呈现Note
部分,但不会用用户提交表单之前存在的数据填充表单字段。
验证失败后如何保存数据?
_new.html.erb
book.rb
class Book < ApplicationRecord
has_many :notes
end
note.rb
class Note < ApplicationRecord
belongs_to :book
validates :title, :body, presence: true
end
notes_controller.rb
def new
@note = Note.new
@book = Book.find(params[:book_id])
respond_to do |format|
format.html {}
format.js {}
end
end
def create
@book = Book.find(params[:book_id])
@note = @book.notes.create(note_params)
if @note.save
respond_to do |format|
format.html { redirect_to user_book_path(id: @book.id, user_id: current_user.slug) }
format.js { redirect_to user_book_path(id: @book.id, user_id: current_user.slug) }
end
else
respond_to do |format|
format.html { render :new }
format.js {render :new}
end
end
end
_new.html.erb
<%= simple_form_for [book, Note.new], remote: true do |f| %>
<%= f.input :title, placeholder: "title", label: false, autofocus: true %>
<%= f.input :body, placeholder: "title", label: false, autofocus: true %>
<%= f.button :submit, "Create note" %>
<% end %>
new.js.erb
答案 0 :(得分:3)
我猜测问题在于您在此处使用Note.new
:
<%= simple_form_for [book, Note.new], remote: true do |f| %>
<%= f.input :title, placeholder: "title", label: false, autofocus: true %>
<%= f.input :body, placeholder: "title", label: false, autofocus: true %>
<%= f.button :submit, "Create note" %>
<% end %>
因此,表单中永远不会有任何值,因为表单始终基于新的Note
对象。
由于您同时在@note
和new
操作中实例化了create
,所以我相信您应该这样做:
<%= simple_form_for [book, @note], remote: true do |f| %>
<%= f.input :title, placeholder: "title", label: false, autofocus: true %>
<%= f.input :body, placeholder: "title", label: false, autofocus: true %>
<%= f.button :submit, "Create note" %>
<% end %>
我不使用simple_form
,所以它是在黑暗中拍摄的。
另外,正如约翰·加拉格尔(John Gallagher)在评论中指出的那样:
@note = @book.notes.create(note_params)
真的应该是这样:
@note = @book.notes.build(note_params)
实例化诸如@note
之类的内容时,通常使用.build
代替.create
,因为.build
不会保存@note
从而使{{1 }}有条件的多一些。