1

/addonを追加できるというページがDogあり、フォームは独自のパーシャルにあります。Simple FormTwitter Bootstrapを使用しています。メインの Bootstrap 用のファイルを追加しましたが、simple_form 用の gem を使用して操作します。

犬コントローラー

# new.js.erb (deleted new.html.erb)

def new 
 @dog = Dog.new

 respond_to do |format|
  format.js
 end
end

# create.js.erb

def create 
  @dog = current_user.dogs.new(params[:dog])

  respond_to do |format|
    if @dog.save
      format.html { redirect_to add_url, notice: 'Dog was successfully added.' }
      format.json { render json: @dog, status: :created, location: @dog}
      format.js
    else
      format.html { render 'pages/add' }
      format.json { render json: @dog.errors, status: :unprocessable_entity }
    end
  end
end

Dogs/_form.html.erb

<%= simple_form_for(@dog, :remote => true) do |f| %>
  <%= render :partial => "shared/error_message", :locals => { :f => f } %>
    <%= f.input :name %>      
  <%= f.button :submit, 'Done' %>
<% end %>

この行:<%= render :partial => "shared/error_message", :locals => { :f => f } %>

エラーhtmlを正しくレンダリングするため、ブートストラップ用です。

ページコントローラ

def add

  respond_to do |format|
    format.html
  end
end

ページ/add.html.erb

<div id="generate-form">
</div>          

犬/new.js.erb

$("#generate-form").html("<%= escape_javascript(render(:partial => 'dogs/form', locals: { dog: @dog })) %>");

dogs/new.html.erbこれで、エラーがAJAX で作成されて以来、まだ私のものであるかのように部分的にレンダリングするにはどうすればよいでしょうか? クライアント側の検証は必要ありませんか?


編集

共有/_error_message.html.erb

<% if f.error_notification %>
   <div class="alert alert-error fade in">
     <a class="close" data-dismiss="alert" href="#">&times;</a>
     <%= f.error_notification %>
   </div>
<% end %>
4

2 に答える 2

2

私たちのチャットを通じて、あなたは create.js.erb も持っていて、そのファイルがフォームをクリアしていると言いました。

create.js を new.js.erb と同じにする: $("#generate-form").html("<%= escape_javascript(render(:partial => 'dogs/form', locals: { dog: @犬}))%>");

それを機能させました。

于 2012-06-20T03:21:22.210 に答える
2

クライアント側の検証を行う必要はありません。ただし、クライアント側の検証が満たされるまで、js を介して送信ボタンを無効にするのが一般的です。また、クライアントがjsをオンにしていない場合に備えて、new.html.erbを削除しません。add には format.js が必要であり、共有エラーの部分呼び出しには remote = true が必要になる場合があると思います

于 2012-06-19T21:39:43.103 に答える