Rails form_for NoMethodError - 无法找到损坏路径的位置

时间:2015-03-24 22:13:46

标签: ruby-on-rails

我尝试使我的CRM应用程序正常工作,并且无法找出损坏部分的位置。 在尝试创建新联系人时,请在链接&company / 1 / contacts / new' 在联系人#new'中得到NoM​​ethodError。

附上截图,请参阅下面的代码。请帮忙找错..

enter image description here

route.rb是:

Rails.application.routes.draw do

  resources :companies do
    resources :contacts do
      member do
        post :new
      end
    end
  end

  root 'companies#index'
end

联系人控制器:

class ContactsController < ApplicationController

  before_action :set_company

  def index
    @contacts = Contact.where(company_id: params[:company_id])
  end

  def new; @contact = @company.contacts.new; end

  def create
    @contact = @company.contacts.create(contact_params)
    @contact.save ? redirect_to @company : render :new
  end

  private

  def set_company; @company = Company.find(params[:company_id]); end

  def contact_params
    params.require(:contact).permit(:name, :position, :phone, :email)
  end
end

查看: new.html.erb:

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

表格助手:

<%= form_for(@contact) do |f| %>
  <div class="field">
    <%= f.label :name %><br>
    <%= f.text_field :name %>
  </div>
  <div class="actions">
    <%= f.submit %>
  </div>
<% end %>

1 个答案:

答案 0 :(得分:2)

您需要将公司指定为form_for的第一个参数:

form_for(@company, @contact)

然后form_for将能够推断出正确的路径。