【问题标题】:form_tag action not working in railsform_tag 操作在 Rails 中不起作用
【发布时间】:2011-09-30 01:46:21
【问题描述】:

我的 application.html.erb 中有这个表格。

<%= form_tag(:action=>"index", :controller=>"posts") %>
  <p>
  // code here
  </p>

我不明白为什么这会被定向到 posts-&gt;create 而不是 posts-&gt;index

谢谢。

【问题讨论】:

    标签: ruby-on-rails forms osx-lion rubymine


    【解决方案1】:

    基本上,Rails 遵守并遵循“RESTful”Web 服务架构。使用 REST 和 Rails,有七种不同的方式可以与服务器就资源进行交互。使用您当前的代码,将表单的操作指定为索引没有意义:Rails 的表单助手可以 POST、PUT 或 DELETE。

    如果你想创建一个帖子,然后重定向到索引,你可以在适用的控制器操作中这样做:

    class PostsController < ApplicationController
    ...
    
    def create
      @post = Post.new
    
      respond_to do |format|
      if @post.save
        format.html { redirect_to(:action => 'index') }
    end
    end
    

    虽然您的表单看起来像:

    <% form_for @post do |f| %>
      # put whatever fields necessary to create the post here
    <% end %> 
    

    【讨论】:

      【解决方案2】:

      对于每个操作的用途,您似乎有些混淆。以下是典型 RESTful 用法的快速总结:

      索引 -> 查看项目列表
      新建/编辑 -> 添加或编辑项目的表单
      创建/更新 -> 创建/更新项目的控制器操作

      您的路线文件未将您编入索引的原因是索引不是通常创建或更新帖子的操作。最好的方法是使用 RESTful。除非您遇到非常不寻常的情况,否则设置系统的最佳方法可能是这样的:

      # routes.rb
      resources :posts
      
      # application.html.erb (or better: posts/_form.html.erb).
      <% form_for @post do |f| %>
      <% end %>
      
      # posts controller, whichever action you want to use
      def new
        @post = Post.new
      end
      

      通过将表单放在名为form 的部分中,您可以在newedit 或您需要在系统中操作帖子的任何其他位置访问它。

      【讨论】:

      • 我想打印一些关于帖子的信息,这就是我将其路由到 Index 的原因。我想以application.html.erb的形式检索我使用的值,并设置一个逻辑来根据逻辑打印一些帖子。
      • 在这种情况下,将信息发送到create,完成后它会路由到index
      • 它会自动执行此操作还是我需要明确提及?
      猜你喜欢
      • 2014-07-20
      • 1970-01-01
      • 1970-01-01
      • 2014-02-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-02-28
      相关资源
      最近更新 更多