1

根据我的知识,我无法弄清楚为什么会出现此错误,一切都已按应正常工作的方式进行设置。

这是我得到的错误: NoMethodError at /short/new undefined method `shorts_path' for #<#:0x007fbc441426e0>

  1. 我的模型很短不是很短S
  2. 当我运行 rake 路线时,没有shorts_path,所以我不确定这个助手来自哪里。我不明白为什么在我的控制器部分中定义form_for时会给我这个错误。@shortdef new

有人可以向我解释一下吗?

先感谢您

这就是我的控制器的样子

class ShortController < ApplicationController

    def show
        @short = Short.find(params[:id].to_i(36))

        respond_to do |format|
            #redirect directly to the url stored as long in the database
            format.html { redirect_to @short.long}
        end
    end

    def new
        @short = Short.new

        respond_to do |format|
            format.html # new.html.erb
        end
    end

    def create
        @short = Short.new(params[:short])

        respond_to do |format|
            if @short.save

                format.html { render action: "show" }

            else

                format.html { render action: "new" }
            end
        end
    end
end

路线

Trainingproject::Application.routes.draw do
  root :to => 'short#welcome'
  resources :short, :only => [:new, :create, :show]
end

表单部分呈现在新视图中

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

        <div class="form-field">
            <%= f.label "Enter your URL" %><br />
            <%= f.text_field :long %>
        </div>
        <div class="actions">
            <%= f.submit %>
        </div>
<% end %>
4

1 回答 1

0

您收到此错误是因为form_for(@short), where @shortis a new Shortrecord 将尝试使用调用的路径助手shorts_path来路由到表单需要去的地方。您的config/routes.rb文件中缺少此路由定义:

 resources :shorts

请阅读入门指南路由指南,其中应说明您缺少的内容。

于 2013-07-31T23:47:07.153 回答