【问题标题】:Calling and passing objects to a custom method in the controller调用并将对象传递给控制器​​中的自定义方法
【发布时间】:2015-01-23 01:38:03
【问题描述】:

我有,我必须想象的是一个关于调用自定义控制器方法并将数据传递给它们的非常简单的问题。

我已经向控制器添加了一个自定义方法dprocess,以便对我在index 中列出的post objects 执行操作,以便使用某种按钮进行调用。 dprocess 方法没有任何视图,只是简单地处理post 中的数据并将结果保存到/tmp/ 中的文件中。我遇到的问题是我不知道如何将数据传递给这个自定义方法。

这是我的 index.html.erb

<% @post.each do |post| %>
    <tr>
      <td class="Name"><%= link_to post.name, post %></td>
      <td class="created_at"><%= link_to "Edit Post", edit_post_path(post) %></td>
      <td class="generate"><%= button_to "Process Post", ........ %></td>
    </tr>
<% end %>

注意button_to中的“........”;缺少的内容是我正在努力弄清楚的。

我的问题是:如何将post 传递给控制器​​中的这个自定义方法?

非常感谢您的任何指导;这个问题一直困扰着我。

【问题讨论】:

    标签: ruby-on-rails ruby-on-rails-4 routes


    【解决方案1】:

    您可以在link_tobutton_to 方法上使用特殊属性remote 来指示您要执行AJAX 操作。

    假设您的路线如下所示:

    resources :posts do
      member do
        # note: the post here means a HTTP POST request is necessary, if you want 
        # a HTTP GET request, change it to get
        post 'dprocess'
      end
    end
    

    所以网址看起来像/posts/:id/dprocess

    然后你可以在点击这样的按钮时执行 AJAX 请求,请 确保将method 属性更改为:post:get,具体取决于您配置路由的方式。

    <% @post.each do |post| %>
        <tr>
          <td class="Name"><%= link_to post.name, post %></td>
          <td class="created_at"><%= link_to "Edit Post", edit_post_path(post) %></td>
          <td class="generate"><%= button_to "Process Post", dprocess_post_path(post), :remote => true, :method => :post %></td>
        </tr>
    <% end %>
    

    这将使用 POST 请求调用您的控制器操作 dprocess

    def dprocess 
      # find object
      @post = Post.find(params[:id])
    
      # ... perform processing
    
      # render nothing
      render :nothing => true
    end
    

    查看文档通常是一个很好的指导:

    button_to documentation, see "Options" sections

    Rails Guide on AJAX helpers

    【讨论】:

    • 作为更新,我不得不删除 render :nothing =&gt; true 行。我不知道它是否与我正在运行的脚本有任何关系(我没有看到任何迹象表明它会),但如果其他人遇到DoubleRenderError,请去掉最后一行。
    • 当您为dprocess 操作定义了模板时会发生这种情况。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-05-25
    • 1970-01-01
    • 1970-01-01
    • 2017-07-27
    • 2014-04-07
    • 1970-01-01
    • 2013-11-10
    相关资源
    最近更新 更多