出于某种奇怪的原因,在ContactsController #redate中恢复'NoMethodError'

时间:2017-12-04 05:03:12

标签: ruby-on-rails ruby

我目前正在构建一个简单的CRM,现在我正在尝试嵌套一个功能,允许用户在联系人部分内分配任务。

所以问题......

当我点击编辑联系人部分而不是编辑表单时,当我点击提交表单时,我得到一个“ContactController#Update中的NoMethodError”。但是我的联系人控制器中从未改变任何内容。

以下是整个错误页面的屏幕截图。

The Error Page

以下是我的整个 contacts_controller.rb 文件。

class ContactsController < ApplicationController
def index
    @contacts = Contact.all
end

def show
    @contact = Contact.find(params[:id])
end

def new
    @contact = Contact.new
end

def edit
    @contact = Contact.find(params[:id])
end

def create
    @contact = Contact.new(contact_params)

    if @contact.save
        redirect_to @contact
    else
        render 'new'
    end
end

def update 
    @contact = Contact.find(params[:id])

    if @contact.update(contact_params)
        redirect_to @contact
    else 
        render 'edit'
    end
end

def destroy
    @contact = Contact.find(params[:id])
    @contact.destroy

    redirect_to contacts_path
end

private
def contact_params
    params.require(:contact).permit(:first_name, :last_name, :job_title, :twitter_url, :linkedin_url, :facebook_url, :medium_url, :email_field, :telephone_field)
end
end

我完全不知道发生了什么事让我的控制器崩溃...

如果您需要我的其他任何代码,请询问。

提前谢谢你!

=============================

这是我的 edit.html.erb 视图代码:

 <hr>
 <h1>Edit Contact</h1>
 <%= render 'form' %>
 <%= link_to 'Back', contacts_path %>

这是我的 _form.html.erb 代码:

 <%= form_with model: @contact, local: true do |form| %>

  <p>
  <%= form.text_field :first_name, placeholder: "Enter Contact Name" %>
  </p>

  <p>
  <%= form.label :job_title %><br>
  <%= form.text_field :job_title %>
  </p>
  <p>
  <%= form.label :twitter_url %><br>
  <%= form.text_field :twitter_url %>
  </p>
  <p>
  <%= form.label :linkedin_url %><br>
  <%= form.text_field :linkedin_url %>
  </p>
  <p>
  <%= form.label :facebook_url %><br>
  <%= form.text_field :facebook_url %>
  </p>
  <p>
  <%= form.label :medium_url %><br>
  <%= form.text_field :medium_url %>
  </p>
  <p>
  <%= form.label :email_field %><br>
  <%= form.text_field :email_field %>
  </p>
  <p>
  <%= form.label :telephone_field %><br>
  <%= form.text_field :telephone_field %>
  </p>
  <p>
  <%= form.submit %>
  </p>
  <% end %>

这是我在模特中的记录:

  t.string :first_name
  t.string :last_name
  t.string :job_title
  t.string :twitter_url
  t.string :linkedin_url
  t.string :facebook_url
  t.string :medium_url
  t.string :email_field
  t.string :telephone_field  

这是我的 contact.rb 型号代码

class Contact < ApplicationRecord
has_many :notes
has_many :tasks
validates :title, presence: true,
                  length: { minimum: 5}

1 个答案:

答案 0 :(得分:0)

您需要将validates :title, presence: true,length: { minimum: 5}替换为validates :job_title, presence: true,length: { minimum: 5}