在Rails5.1.4中调用POST请求不会给出路由匹配[GET]错误

时间:2018-01-04 20:05:51

标签: ruby-on-rails ruby ruby-on-rails-5

我有一个SubscriptionSignupsController

 def create
   @subscription = SubscriptionSignup.new(subscription_params)
   if @subscription.save
     redirect_to @subscription
   else
     render 'new'
   end
 end

我的routes.rb文件包含

resources 'subscription_signups', only: [:create, :new]

当我打电话给localhost:3000/subscription_signups时,我得到了

  

没有路线匹配[GET]错误

我对new.hmtl.erb文件的看法我们使用瞪羚设计系统作为sass

<div class="SubscriptionSignup">
<div class="SubscriptionSignup-content">
    <form class="simple_form Form Form--protectSubmit">
            <div class="email-signup">
            <%= simple_form_for @subscription, html: { class: "Form Form--protectSubmit" } do |f| %>
                <div class="dr-FormField Form-inputWrapper">
                    <div class="gds-FormField-label">

                            <%= f.input :email, placeholder: "Email address"%>
                                    <%= f.input :password, placeholder: "6 Characters Minimum"%>
                                    <%= f.input :password_confirmation, placeholder: "Same as Password"%>
                                <%= f.input :name%>
                                <%= f.input :address_lane_1%>
                                <%= f.input :address_lane_2%>
                                <%= f.input :city%>
                                <div class="Form-InputGroup">

                                                <%= f.label :state %>
                                                <%= select_tag "state", options_for_select(us_states)%>


                                        <%= f.input :zip%>

                                </div>
                            </label>
                        </div>
                    </div>



                <%= f.button :submit, "Review Order", class: "gds-Button Form-button" %>

            <% end %>

        </div>
    </form>
</div>

2 个答案:

答案 0 :(得分:1)

如果@subscription.save成功,那么 #create 操作会重定向到 #show ,但您无法定义 show < / strong>您的路线中的行动。您有2个选项(假设错误是由于#create操作重定向到#show:

  1. 将缺少的 show 路线添加到routes.rb,如下所示:resources 'subscription_signups', only: [:create, :new, :show]
  2. 将流程重定向到redirect_to @subscription以外的其他位置(缺少显示路线)
  3. 有关详细信息,请查看Rails routing documentation

答案 1 :(得分:0)

如果你使用的是simple_form_for,那么你应该可以做这样的事情

 url_for(:action =&gt;'create',:controller =&gt;'subscription'),     :method =&gt; 'post'do | f | %GT;

我希望这可以帮助你