1

Userhas_one UserProfile
次に、列を文字列として UserProfile持ちます。wanted_message

wanted_message
ここでは、特定のユーザーがメッセージを入力して「更新」ボタンを押すと、更新する入力ボックスを表示しています。

どうやって?今、「更新」を押すと、URL「/users/12」に移動します

私はそれを望んでいません:(ページをロードせずに更新したい(Ajaxリクエスト)。
次にupdate_messageユーザーコントローラーでアクションを呼び出したい

どうやって?

    <%= form_for(current_user, :url => {:controller => "user", :action => "update_message" }, :remote => true, :class => 'form-search') do |f| %>
        <%= f.fields_for :user_profile do |profile_form| %>
            <div class="input-append">
                <%= profile_form.text_field :wanted_message, :class => 'span6' %>
                <button type="submit" class="btn">Update</button>
            </div>
        <% end %>
    <% end %>
4

1 に答える 1

2

remote => trueフォームに設定する必要があり:method => put、Put を設定すると、データベース内の列を更新できremote true、ajax リクエストを送信するようにフォームを構成できます。update_messageまた、ajax リクエストを処理するには、コントローラーでアクションを構成する必要があります。最後に、ルートが正しく構成されていることを確認してください。routes.rb でそのルートを定義する必要があり、おそらく:as => 'update_message'そのルート ヘルパー メソッドにアクセスできるようにする必要があります。

これは、レールフォームで ajax を使用するのに役立ちますhttp://edgeguides.rubyonrails.org/working_with_javascript_in_rails.html

これはサンプルフォームですが、haml です。

  = link_to "Start", polls_toggle_live_path(poll.id), :method => :put, :remote => true, :class=> 'btn btn-success btn-small start-poll', :id => poll.id

このコントローラ アクションにリンクするもの

  def toggle_live
    @poll = Poll.find(params[:poll_id])
    @poll.toggle_live
    @poll.save!
  end

関連付けられたポーリング モデルでこのメソッドを呼び出して、db 列の値を切り替えます

  def toggle_live
    self.is_live = !self.is_live
  end

最後に、このようにroutes.rbで構成され、正しい更新を渡します

match '/polls/toggle_live/:poll_id' => 'polls#toggle_live', :via => :put, :as => 'polls_toggle_live'
于 2013-06-14T16:15:45.773 に答える