具有单一资源错误的自定义路由



我的路由是这样的

routes.rb

 get    '/:pimp_id/mepagers(.:format)',     :to => 'mepagers#index',    :as => 'mepagers'
 get    '/:pimp_id/mepager/new(.:format)',  :to => 'mepagers#new',      :as => 'new_mepager'
 get    '/:pimp_id/mepager/edit(.:format)', :to => 'mepagers#edit',     :as => 'edit_mepager'
 get    '/:pimp_id/mepager(.:format)',      :to => 'mepagers#show',     :as => 'mepager'
 post   '/:pimp_id/mepager(.:format)',      :to => 'mepagers#create',   :as => 'create_mepager'
 put    '/:pimp_id/mepager(.:format)',      :to => 'mepagers#update'
 patch  '/:pimp_id/mepager(.:format)',      :to => 'mepagers#update'
 delete '/:pimp_id/mepager(.:format)',      :to => 'mepagers#destroy'

我试着从

HTTP Verb Path Controller#Action Used for 
GET /geocoder/new geocoders#new return an HTML form for creating the geocoder 
POST /geocoder geocoders#create create the new geocoder 
GET /geocoder geocoders#show display the one and only geocoder resource 
GET /geocoder/edit geocoders#edit return an HTML form for editing the geocoder 
PATCH/PUT /geocoder geocoders#update update the one and only geocoder resource 
DELETE /geocoder geocoders#destroy delete the geocoder resource

(http://guides.rubyonrails.org/routing.html)来源

但是当我点击/1/mepager/new上的提交按钮时,我得到以下错误:

Routing Error
No route matches [POST] "/1/mepager/new"

我甚至试图将post actions路由更改为/1/mepager/new,但这根本没有帮助,因为他找不到mepager的参数。在谷歌上找不到任何类似的东西,所以我希望有人能帮助这个路由让我恶心!

new.html.erb

<%= render 'form' %>
<%= link_to 'Back', pimps_path %>

_form.html.erb

<%= form_for 'mepager_path' do |f| %>
  <% if @mepager.errors.any? %>
    <div id="error_explanation">
      <h2><%= pluralize(@mepager.errors.count, "error") %> prohibited this mepager from being saved:</h2>
      <ul>
      <% @mepager.errors.full_messages.each do |msg| %>
        <li><%= msg %></li>
      <% end %>
      </ul>
    </div>
  <% end %>

<table style="border:1px solid black; border-spacing:5px"; width="1521" bgcolor="#DFDFDF">
    <colgroup>
        <col width="1050">
        <col width="300">
    </colgroup>
    <tr> <td>   <h1>NEW: ID# Title  </td>   <td> <h1>Programme:  a350</h1></td> </tr>
</table>


<p id="notice"><%= notice %>
<table style="border:1px solid black; border-spacing:5px"; width="1500"; height="640">
    <tr>
        <th rowspan="3">
            <table style="border:1px solid black; border-spacing:5px"; width="1150"; height="506">
                <colgroup>
                    <col width="675">
                    <col width="675">
                </colgroup>

                <tr>    <th colspan="2" align="left" height="10">   <u><strong>Change description & pictures:</strong></u>  </th>   </tr>
                <tr>    <th colspan="2" align="left" height="10">   <u><b>Pre:</b></u>                                      </th>   </tr>                   
                <tr>    
                    <td align="left" valign="top">  <div class="field"> <%= f.text_area :pre, :size=>"100x12"%> </div>  </td>   
                    <td>    
                        <div class="actions">     
                            <%= file_field_tag :file %>   
                            <%= submit_tag "Upload image" %> 
                        </div> 
                    </td>       
                </tr>
                <tr>    <th colspan="2" align="left" height="10">   <u><b>Post:</b></u>                                     </th>   </tr>
                <tr>    
                    <td align="left" valign="top">  <div class="field"> <%= f.text_area :post, :size=>"100x12" %>   </div>  </td>   
                    <td>
                        <div class="actions">     
                            <%= file_field_tag :file %>   
                            <%= submit_tag "Upload image" %> 
                        </div> 
                    </td>   
                </tr>


            </table>
        </th>
        <td valign="top">
            <table style="border:1px solid black; border-spacing:5px"; width="350"; height=135>
                <colgroup>
                    <col width="160">
                    <col width="190">
                </colgroup>
                <tr>    <th colspan="2" align="left" height="10">   <u><strong>Expected savings / overspend reduction:</strong></u> </th>                               </tr>       
                <tr>    <td align="left">   h/AC:   </td>   <td align="left">   <div class="field"> <%= f.number_field :save_h, :size=>5 %> </div>  </td>           </tr>
                <tr>    <td align="left">   concessions/AC: </td>   <td align="left">   <div class="field"> <%= f.number_field :save_c, :size=>5 %> </div>  </td>   </tr>
                <tr>    <td align="left">   others: </td>   <td align="left">   <div class="field"> <%= f.text_field :save_other, :size=>30 %>  </div>  </td>           </tr>           
            </table>
        </td>
    </tr>
    <tr>
        <td>
            <table style="border:1px solid black; border-spacing:5px"; width="350"; height=180>
                <colgroup>
                    <col width="160">
                    <col width="190">
                </colgroup>

                <tr>    <th colspan="2" align="left" height="10">   <u><strong>Affected domains / responsibility:</strong></u>  </th>                                       </tr>       
                <tr>    <td align="left">   Design: </td>   <td align="left">   <div class="field"> <%= f.text_field :affect_design, :size=>30 %>   </div>  </td>       </tr>
                <tr>    <td align="left">   Stress: </td>   <td align="left">   <div class="field"> <%= f.text_field :affect_stress, :size=>30 %>   </div>  </td>       </tr>
                <tr>    <td align="left">   Manufacturing:  </td>   <td align="left">   <div class="field"> <%= f.text_field :affect_me, :size=>30 %>   </div>  </td>   </tr>
                <tr>    <td align="left">   Others: </td>   <td align="left">   <div class="field"> <%= f.text_field :affect_other, :size=>30 %>    </div>  </td>       </tr>   
            </table>
        </td>
    </tr>
    <tr>
        <td>
            <table style="border:1px solid black; border-spacing:5px"; width="350"; height=135>
                <colgroup>
                    <col width="160">
                    <col width="190">
                </colgroup>
                <tr>    <th colspan="2" align="left" height="10">   <u><strong>Affected documents:</strong> </u>    </th>   </tr>       
                <tr>    <td align="left">   Drawing number/HTZ: </td>   <td align="left">   <div class="field"> <%= f.text_field :affect_dno, :size=>30 %>  </div>  </td>   </tr>
                <tr>    <td align="left">   Material ID:    </td>   <td align="left">   <div class="field"> <%= f.text_field :affect_mid, :size=>30 %>  </div>  </td>       </tr>
                <tr>    <td align="left">   Others: </td>   <td align="left">   <div class="field"> <%= f.text_field :affect_otherdoc, :size=>30 %> </div>  </td>               </tr>
            </table>            
        </td>
    </tr>
    <tr>
        <td>
            <table style="border:1px solid black; border-spacing:5px"; width="1150"; height=196>
                <tr height="10">    <th align="left">   <u><b>Comments / current status / further notes:</b></u>    </th>   </tr>       
                <tr>    <td align="left" valign="top">  <div class="field">  <%= f.text_area :save_h, :size=>"100x8"%> </div> </td>     </tr>       
            </table>
        </td>
        <td> 
            <table style="border:1px solid black; border-spacing:5px"; width="350"; height=150>
                <colgroup>
                    <col width="160">
                    <col width="190">
                </colgroup>
                <tr>    <th colspan="2" align="left" height="10">   <u><strong>General information:</strong></u>    </th>   </tr>   
                <tr>    <td align="left">   Idea owner: </td>   <td align="left">   <div class="field"> <%= f.text_field :owner, :size=>30 %>   </div>  </td>               </tr>
                <tr>    <td align="left">   Date of submission: </td>   <td align="left">   autofilled  </td>               </tr>
                <tr>    <td align="left">   PPS available:  </td>   <td align="left">   <div class="field"> <%= f.text_field :pps, :size=>30 %> </div>  </td>               </tr>
                <tr>    <td align="left">   Reference (VV/ZTV): </td>   <td align="left">   <div class="field"> <%= f.text_field :reference, :size=>30 %>   </div>  </td>   </tr>
            </table>
        </td>
    </tr>
</table>        

  <div class="actions">
    <%= f.submit "Create One Pager" %>
  </div>
<% end %>

参见form_for的文档

参考上面链接的文档;form_for方法接受几个参数:

  1. 项>

在您的情况下,我认为您要做的是传递'mepager_path'命名路径作为表单应提交的URL。但是,您缺少form_for参数的分隔符,因此Rails认为'mepager_path'record参数的值。

record参数用来传递表单应该描述的对象的信息,这样Rails就可以推断出对象的属性,以最小的开销为您(开发人员)创建表单。根据你的情况,我想你可以试试

<%= form_for :mepager, url: mepager_path do |f| %>

我也是一个Rails新手,所以我不能保证你我的代码样本是正确的,但我的答案的要点是,你的form_for参数是不正确的。作为Rails的新手,我经常被不同形式的参数所困扰。对我来说,大量的表单使它们难以阅读,我必须不断确保我没有误解代码。此外,哈希语法总是让我感到困惑。

我的答案是从这里取的。我发现它是一个非常有用的参考网站。

希望我的回答对你有帮助

最新更新