ActionController :: RoutingError(没有路由匹配[PUT]“/ welcome”):

时间:2013-02-05 10:44:03

标签: ruby-on-rails ajax routes

我想要下一件事: 单击按钮时,我想打印params[:id]的{​​{1}}。

这是我的java脚本代码:

welcome controller

这是我的$(".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 并按下按钮(btn_skip)时,我得到了:

rails s

routes.rb中:

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

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

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:&#39; / welcome /#{:id}&#39;?

任何帮助表示赞赏!

2 个答案:

答案 0 :(得分:2)

如果使用html.erb模板生成Javascript,则使用内置的url生成器。 e.g。

这是我的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)将自动为我创建网址。

所以,假设我实际上使用的是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 %>

答案 1 :(得分:1)

我建议你使用rails form helper而不是plain 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并将自动传递给更新操作。 :)