0

我对 ruby​​ on rails 很陌生。我正在尝试开发一个仅在控制器中使用 ActiveModel 对象而不保存的应用程序。不幸的是,单击提交按钮后,我收到错误消息。这个应用程序的目的是执行一些计算并显示结果。我怎样才能做到这一点?

路由错误没有路由匹配 [POST] "/shugarcalc"

应用程序/模型/sugar_amount.rb

    class SugarAmount   
      include ActiveModel::Model  

      attr_accessor :l, :h, :b, :tw, :tf  

      VALID_NUMBER_REGEX= /[0-9]{1,2}([,][0-9]{1,2})?/  

      validates :l, presence: true, format: { with: VALID_NUMBER_REGEX },  length: { maximum: 10 }  
      validates :h, presence: true, format: { with: VALID_NUMBER_REGEX },  length: { maximum: 10 }  

    end  

配置/路由.rb

    SimpleDesign::Application.routes.draw do  
      root 'static_pages#home'  

      resources :sugar_amount, only: [:new, :create]  

      match '/shugarcalc',  to: 'shugar_amounts#shugar',            via: 'get'    

    end  

应用程序/控制器/shugar_amounts_controller.rb

    class ShugarAmountsController < ApplicationController  

      def sugar  

        @sugar_amount=SugarAmount.new  

      end  

      def create    
        @sugar_amount = SugarAmount.new(params[:sugar_amount])    
        /here i want to use some functions /       
        redirect_to root_url      
        /this is temporary, just to see if anything happens  /      

      end  

    end  

应用程序/views/sugar_amounts/sugar.html.erb

    <%= form_for(@sugar_amount) do |f| %>  

      <%= f.label :l, "eggs" %>  
      <%= f.text_field :l %><br>  

      <%= f.label :h, "flour [mm]" %>  
      <%= f.text_field :h %><br>  

      <%= f.submit "Reduce!" %>  
    <% end %>
4

1 回答 1

1

您的错误信息:

路由错误没有路由匹配 [POST] "/shugarcalc"

表示您正在对/shugarcalc. 但是您的路线是为 GET 请求定义的:

match '/shugarcalc',  to: 'shugar_amounts#shugar',            via: 'get'
# ------------------------------------------------------------^^^^^^^^^^

所以 POST/shugarcalc将无法正常工作。此外,将寻找该路线,但您在该控制器中ShugarAmountsController#shugar没有方法。shugar

首先决定/shugarcalc应该是 GET 还是 POST(提示:如果它只是进行一些计算并返回结果而不修改任何内容,那么它可能是 GET),然后调整路由的via:选项或您尝试访问路由的方式因此。然后将shugar方法添加到ShugarAmountsController.

我还建议您正确拼写“糖”。有时将其称为“shugar”,有时将其称为“sugar”,会让您发疯,试图记住在哪个地方使用了哪个拼写,并且可能会与 Rails 喜欢做出的假设产生一些冲突。

于 2013-10-27T04:02:57.723 回答