【问题标题】:Rails getting started 5.7Rails 入门 5.7
【发布时间】:2013-07-01 08:36:39
【问题描述】:

我是第一次用 ruby​​ 编程,所以我正在从官方网站上做“入门”教程:

http://guides.rubyonrails.org/getting_started.html

我对 5.7 有疑问。教程说:

如果你现在再次提交表单,Rails 会抱怨没有 找到表演动作。虽然这不是很有用,所以让我们添加 继续前的表演动作。

然后是下面的代码:

post GET /posts/:id(.:format) posts#show

但是我必须把这段代码放在哪里?

谢谢!

【问题讨论】:

    标签: ruby-on-rails railstutorial.org


    【解决方案1】:

    您所描绘的是show 资源路由的posts 成员。它实际上不是代码,而是 URL 路由的一种模式。您可以通过在命令行中键入 rake routes 以这种方式查看您的所有路线。

    分解路线:

    post GET /posts/:id(.:format) posts#show
    # `post` => named route name (available by default only to singular routes)
    # `GET` => HTTP method
    # `/posts/:id(.:format)` => path made accessible by route
    # :id => specifies that the argument passed in as `:id` is available to the controller as `params[:id]`
    # `posts#show` => controller is `posts`, action is `show`
    

    您需要创建一个相应的show 控制器操作,该路由将映射到:

    # app/controllers/posts_controller.rb
    def show
      @post = Post.find(params[:id])
    end
    

    【讨论】:

    • 好的,我已经这样做了。但在那之后,教程说要添加该代码,但没有说在哪里......
    • 文档内容为:let's add the show action before proceeding。它指的是posts 控制器的show 操作。它 not 指的是以下行,甚至不是代码。
    • 谢谢,我发现了另一个问题,现在我已经解决了,一切正常。
    • 我同意 Lorenzo,文档不清楚。作为一个新手,我尝试将那个“非代码”块放在 config/routes.rb 文件中。它确实看起来像某种代码。
    【解决方案2】:

    我刚刚在阅读教程时遇到了同样的问题。对这个问题更直接的回答是“无处”。本教程中对该行的引用仅供参考。它的阅读方式使您相信您应该添加它,但没有什么可添加的。继续阅读本教程的其余部分,一切都会好起来的。也许有一天作者会阅读并修复它。

    【讨论】:

      【解决方案3】:

      添加以下(粗体)句子将使 5.7 中的说明更加清晰:

      如果你现在再次提交表单,Rails 会抱怨找不到 show 动作。虽然这不是很有用,所以让我们在继续之前添加 show 动作。 现在运行“rake routes”会产生以下结果:

      post GET /posts/:id(.:format) posts#show

      【讨论】:

        【解决方案4】:

        如果您的应用程序中有 PostsController,那么您必须在 config/routes.rb 中有以下内容

        resources :posts
        

        这样它将为 post 控制器生成 7 个默认路由,其中​​ show 是默认操作。

        当您在控制台中执行rake routes 时,它将显示您应用程序的所有路由。从这些路线中,您可以获得

        post GET    /posts/:id(.:format)                        posts#show
        

        以上是路线,不是代码。所以它声明你有一个名为“posts”的控制器,“show”是它的一个动作。可以通过“/posts/:id”使用“get”方法访问。

        【讨论】:

        • OP 表示他们已达到教程的第 5.7 节。据推测,他们已经添加了resources :posts,因为这是在第 5 节中指定的。
        【解决方案5】:

        确保私有部分位于 def show 块之后

        class PostsController < ApplicationController
        
        def new
        end
        
        def create
          #render text: params[:post].inspect
          @post = Post.new(post_params)
        
          @post.save
          redirect_to @post
        end
        
        def show
          @post = Post.find(params[:id])
        end
        
        private
          def post_params
            params.require(:post).permit(:title, :text)
          end
        
        end
        

        【讨论】:

          【解决方案6】:

          配置文件不需要添加任何东西,正如一些人已经说过的,运行命令后出现的信息

          搜索路线

          只需将 show 操作添加到 post_controller.rb 和 show.html.erb 视图就足以发布信息并继续示例。

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 2011-10-11
            • 2016-12-14
            • 1970-01-01
            • 1970-01-01
            • 2011-12-23
            • 2017-02-24
            • 1970-01-01
            相关资源
            最近更新 更多