1

次に欲しいのは、ボタンがクリックされたときに、 の を印刷したいということparams[:id]ですwelcome controller

これは私のJavaスクリプトコードです:

$(".btn_skip").click(function() {
    $.ajax({
        url: '/welcome',
        type: 'PUT',
        data: {show_msg: $("#mycheckbox").is(":checked")}
    });
});

これは私のものwelcome_controller.rbです:

class WelcomeController < ApplicationController
def update
    @user = User.find(params[:id])
    puts params[:id]
    end
end

私が走ったとき:rails sそしてボタン(btn_skip)を押したとき、私は得ました:

Started PUT "/welcome" for 127.0.0.1 at 2013-02-05 12:18:26 +0200

ActionController::RoutingError (No route matches [PUT] "/welcome"):

ルート.rb:

resources :welcome

rake routes:

welcome_index GET    /welcome(.:format)          welcome#index
              POST   /welcome(.:format)          welcome#create
new_welcome   GET    /welcome/new(.:format)      welcome#new
edit_welcome  GET    /welcome/:id/edit(.:format) welcome#edit
welcome       GET    /welcome/:id(.:format)      welcome#show
              PUT    /welcome/:id(.:format)      welcome#update
              DELETE /welcome/:id(.:format)      welcome#destroy

たぶん、IDを渡す必要がありurl: '/welcome'ますか?

もしそうなら、どうすればIDを取得できますか?おそらく: url: '/welcome/#{:id}'?

どんな助けでも大歓迎です!

4

2 に答える 2

2

html.erbテンプレートを使用してJavascriptを生成する場合は、組み込みのURLジェネレーターを使用します。例えば

これは私のIndex.html.erbです

<% @device_layouts.each do |device_layout| %>
  <tr>
    <td><%= link_to 'Show', device_layout %></td>
    <td><%= link_to 'Edit', edit_device_layout_path(device_layout) %></td>
    <td><%= link_to 'Destroy', device_layout, confirm: 'Are you sure?', method: :delete %></td>
  </tr>
<% end %>

ここでedit_device_layout_path(device_layout)自動的にURLが形成されます。

したがって、実際にjavascriptを使用していて、上記の各項目に複数の編集ボタンがあるとすると、コードは次のようになります。

    <% @device_layouts.each do |device_layout| %>
      <tr>
        <td><%= link_to 'Show', device_layout %></td>
        <td>
 <script type="text/javascript">
    $(".btn_edit").click(function() {
        $.ajax({
            url: '/welcome/<%=device_layout.id%>',
            type: 'PUT',
            data: {show_msg: $("#mycheckbox").is(":checked")}
        });
    });
</script>
<div class="btn_edit">Edit Me</div>
</td>
        <td><%= link_to 'Destroy', device_layout, confirm: 'Are you sure?', method: :delete %></td>
      </tr>
    <% end %>
于 2013-02-05T10:53:05.417 に答える
1

プレーンHTMLの代わりにRailsフォームヘルパーを使用することをお勧めします。とにかくそれはあなたの選択です。現在の実装では、フォームに非表示のフィールドを追加できます。更新アクションにcurrent_userのIDを渡したいと想定しています。

<input type="hidden" id="current_user" value="<%= current_user.id %>" />

今あなたのjavascriptコードで:

$("#submit").click(function() {
  user_id = $('#current_user').val();
  $.ajax({
    ## the url is the controller
    url: '/welcome' + user_id,
    type: 'PUT',
    data: {show_msg: $("#mycheckbox").is(":checked")}
  });
});

それでおしまい!ユーザーIDを取得し、自動的にアクションを更新するために渡されます。:)

于 2013-02-05T10:58:47.677 に答える