【问题标题】:Call a custom controller action method from a 'link_to'从“link_to”调用自定义控制器操作方法
【发布时间】:2011-07-23 02:10:59
【问题描述】:

我正在使用 Ruby on Rails 3,我想在我的控制器文件中声明一个操作方法,以便在我的视图文件中我可以使用如下内容:

link_to("Delete", posts_path(@post.id), :method => :delete)

也就是说,要有一个链接,以便我可以“直接”在我的控制器中调用和运行一个操作方法。

以上面的代码为例,可以调用destroy方法加上:method => :delete

【问题讨论】:

  • 你不应该这样做。视图由控制器调用,而不是相反。做你想做的事会破坏应用程序的 MVC 特性,并在视图中创建对控制器的依赖。您也许可以通过一些奇特的路线来完成此任务,但我不知道那会是什么样子。
  • 这个问题对我来说毫无意义。所描述的正是mvc。请详细说明。
  • 这就是完美的 MVC。为什么它不是 MVC,MVC 的做法是什么?

标签: ruby-on-rails ruby ruby-on-rails-3 methods hyperlink


【解决方案1】:

你可以试试这个。它适用于我的情况。

 <%= link_to(t(:delete), :action => 'destroy', :method => :delete, :id => @post.id ) %> 

【讨论】:

    【解决方案2】:

    我会坚持你的 cmets 的建议,但语法是:

    <%= link_to "Delete", {:action => 'delete', :id => @post.id} %>
    

    【讨论】:

      【解决方案3】:

      posts_path 更改为post_path

      <%= link_to 'Destroy', post_path(post), :confirm => 'Are you sure?', :method => :delete %>
      

      或者,甚至更好,

      <%= link_to 'Destroy', post, :confirm => 'Are you sure?', :method => :delete %>
      

      另外,要链接到另一个动作,请为其添加路由, 例如resources :posts, :member =&gt; [:mycustomaction] 和在你看来 &lt;%= link_to("foobar", mycustomaction_post_path(post) %&gt;

      【讨论】:

      • 对不起,我之前的错误答案...Rails3 正确处理 link_to 在您使用安静的路由和 rails.js 时在此处进行 POST。使用button_to 以实现兼容性可能仍然有一些好处
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-11-22
      • 1970-01-01
      • 1970-01-01
      • 2023-03-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多