我正在为名为“ExternalDatabase”的模型编写代码。

除了类声明之外,模型文件中没有任何代码。我为 index、new、show 和 _form .html.erb 添加了查看页面。

config/routes.rb 包含行 resources :external_databases 。该模型此时不包含嵌套资源。在此应用程序中还声明了其他模型,尽管目前它们都没有与此模型交互,并且在声明 resources :external_databases 之前,它们都经过测试并且可以正常运行和关闭。

我有一个从索引 View 中到 new_external_database_path 的链接,如果我正确地跟随,它的行为与 {:action => "new", :controller => "external_database"} 完全一样。

这理论上应该加载 application/external_databases/new ,它将呈现 _form.html.erb_form 的第一行是 <%= form_for(@external_database) do |f| %>
使用/new 的链接时会出现帖子标题中所述的问题。 url application/external_databases/new 有以下错误:
No route matches {:action=>"show", :controller=>"external_databases"}
当我使用 rails console 创建一个数据成员时,它被索引和显示正确显示。 _form 方法使用相同的 edit 文件,并成功编辑控制台创建的数据成员。销毁也起作用。

……那它为什么不识别新方法呢?

我这个模型的 Controller 代码:

    class ExternalDatabasesController < ApplicationController

     def index
      @external_databases = ExternalDatabase.all

      respond_to do |format|
       format.html # index.html.erb
       format.json { render :json => @external_databases }
      end
     end

     # POST /external_databases
     # POST /external_databases.json

     def new
      @external_database = ExternalDatabase.new

      respond_to do |format|
       format.html # new.html.erb
       format.json { render :json => @external_database }
      end
     end

     def show
      @external_database = ExternalDatabase.find(params[:id])

      respond_to do |format|
       format.html # show.html.erb
       format.json {render :json => @external_database }
      end
     end

     def create
      @external_database = ExternalDatabase.new(params[:external_database])

      respond_to do |format|
       if @external_database.save
        format.html {redirect_to @external_database, :notice => "New External Database         Profile was created successfully!"}
        format.json {render :json => @external_database, :status => :created, :location => @external_database}
       else
        format.html {render :action => "new"}
        format.json { render :json => @external_database.errors, :status =>         :unprocessable_entity }
       end
      end
     end


     #GET /external_databases/1/edit
     def edit
      @external_database = ExternalDatabase.find(params[:id])
     end

     # PUT /external_databases/1
     # PUT /external_databases/1.json
     def update
      @external_database = ExternalDatabase.find(params[:id])

      respond_to do |format|
       if @external_database.update_attributes(params[:external_database])
        format.html {redirect_to @external_database, :notice => "External Database         Profile was updated successfully!" }
        format.json {head :ok}
       else
        format.html { redner :action => "edit" }
        format.json {render :json => @external_database.errors, :status =>         :unprocessable_entity }
       end
      end
     end


     # DELETE /external_databases/1
     # DELETE /external_databases/1.json
     def destroy
      @external_database = ExternalDatabase.find(params[:id])
      @external_database.destroy

      respond_to do |format|
       format.html { redirect_to external_databases_rul }
       format.json { head :ok }
      end
     end

    end

更新:添加了 routes.rb 和 Views 代码

我的 routes.rb 文件:
    App::Application.routes.draw do

      resources :type_as do
         resources :type_bs
         end

      resources :type_bs do
        resources :type_as
        resources :type_cs
        end

      resources :type_cs do
       resources :type_bs
       end

      resources :external_databases

      root :to => "home#index"

    end

意见:

external_databases_form
    <%= form_for(@external_database) do |f| %>

     <div class="field">
      <%= f.label :name %><br/>
      <%= f.text_field :name %><br/>
     </div>
     <div class="field">
      <%= f.label :description %><br/>
      <%= f.text_field :description %><br/>
     </div>
     <div class="field">
      <%= f.label :url %><br/>
      <%= f.text_field :url %><br/>
     </div>
     <div class="actions">
       <%= f.submit %>
     </div>
    <% end %>

index.html.erb
    <p id="notice"><%= notice %></p>
    <h1>External Databases</h1>

    <table border="1">
     <tr>
      <th>Database Name</th>
     </tr>
     <% @external_databases.each do |exdb| %>
      <tr>
       <td><%= exdb.name %></td>
       <td><%= truncate(exdb.description) %></td>
       <td><%= link_to 'Show', exdb %></td>
       <!-- link_to.... :target => "_blank" will open the url in a new window -->
       <td><%= link_to 'Visit', exdb.url, :target => "_blank" %></td>
       <td><%= link_to 'Edit', edit_external_database_path(exdb)%></td>
       <td><%= link_to 'Destroy', exdb, :confirm => 'Are you sure?', :method => :delete %></td>
      </tr>
     <% end %>
    </table>

    <br/>
    <%= link_to 'New External Database Profile', { :action => "new", :controller => "external_databases" }%> |
    <%= link_to 'Home', root_path %>

新的.html.erb
    <h1>Creating a new External Database Profile</h1>

    <%= render 'form' %>

    <%= link_to 'Back', external_database_path %>

显示.html.erb
    <p id="notice"><%= notice %></p>

    <table cellspacing="3" cellpadding="5" border="1">
     <tr>
      <th><b>External Database Name</b></th>
      <th><b>Database ID</b></th>
     </tr>
     <tr>
      <td><%= @external_database.name %></td>
      <td><%= @external_database.id %></td>
     </tr>
     <tr colspan="2">
      <th><b>URL</b></th>
     </tr>
     <tr colspan="2">
      <td><%= @external_database.url %></td>
      <td><%= link_to 'Visit External Database', @external_database.url %></td>
     </tr>
    </table>



    <p>
     <h3>Description</h3>
     <!% @external_database.description.split.scan(/.{,60}/).each do |line| %>
      <!%= line %><br/>
     <!% end %>
    </p>

    <br /><br /><br />
    <%= link_to 'Back to External Database Index', external_databases_path %> |
    <%= link_to 'Edit', edit_external_database_path(@external_database) %> |
    <%= link_to 'Destroy', :confirm => 'Are you sure?', :method => :delete %>

最佳答案

您的“返回”链接中的 new.html.erb 文件中有一个错字。它应该是:

external_databases_path

您可以将其与上面 show.html.erb 中您自己的反向链接进行比较。

修正:new.html.erb
<h1>Creating a new External Database Profile</h1>

<%= render 'form' %>

<%= link_to 'Back', external_databases_path %>

关于ruby-on-rails - Rails 路由 - :action => 'new' returns error "No route matches {:action=>"show". .. 在同一个 Controller 中,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/8866069/

10-17 02:01