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

也许,我应该传递 idurl: '/welcome'吗?

如果是这样,我怎样才能得到身份证?也许是: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 %>

whereedit_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

我建议您使用 rails form helper 而不是纯 html。不管怎样,这是您的选择,使用当前的实现,您可以向表单添加隐藏字段。我假设您想传递 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 回答