轨道关联用户和联系人抛出错误



将"联系人控制器"中的代码库从@contacts = Contact.all修改为@contacts = current_user.contact,以便用户只能看到他们的联系人(目前任何用户都可以看到所有联系人)这引发了以下错误。尝试了调整,但仍然没有成功,并检查了psql中的数据库,并且都有id列。守则中有什么想法或需要修改的地方吗?

Failure/Error: <% if @contacts.any? %> ActionView::Template::Error: PG::UndefinedColumn: ERROR: column contacts.user_id does not exist LINE 1: SELECT 1 AS one FROM "contacts" WHERE "contacts"."user_id" ... ^ : SELECT 1 AS one FROM "contacts" WHERE "contacts"."user_id" = $1 LIMIT 1

联系人控制器类联系人控制器<应用程序控制器

  before_action :contact, only: [:show, :edit, :update, :destroy]   before_action :authenticate_user!

  def index
    @contacts = current_user.contact   end
  def new
    @contact = Contact.new   end
  def create
    Contact.create(contact_params)
    redirect_to '/contacts'   end
  def show   end
  def edit   end
  def update
    @contact.update(contact_params)
    redirect_to '/contacts/' + "#{@contact[:id]}"   end

  def destroy
    @contact.destroy
    redirect_to '/contacts'   end
  private
  def contact_params
    params.require(:contact).permit(:firstname, :surname, :email, :phone, :image)   end
  def contact
    @contact = Contact.find(params[:id])   end

end

用户控制器

class UsersController < ApplicationController
end

接触式

class Contact < ActiveRecord::Base
  belongs_to :user
  has_attached_file :image, styles: {thumb: "100x100>"}
  validates_attachment_content_type :image, content_type: /Aimage/.*Z/
end

用户模型

class User < ActiveRecord::Base
  has_many :contacts, dependent: :destroy
  devise :database_authenticatable, :registerable,
         :recoverable, :rememberable, :trackable, :validatable
end

索引html

<%if user_signed_in? %>
  <%= link_to 'Log out', destroy_user_session_path, method: :delete %>
<%end%>
<% if @contacts.any? %>
  <% @contacts.each do |contact| %>
  <%= link_to image_tag(contact.image.url(:thumb)), contact_path(contact) %>
  <h3><%= contact.firstname%> <%=contact.surname%></h3>
  <%=contact.email%><br />
  <%=contact.phone%>
  <br />
  <br />
  <%end%>
<%else%>
  No contacts yet!
<%end%>
<br />
<br />
<%= link_to 'Add a contact', new_contact_path%>

架构

ActiveRecord::Schema.define(version: 20160504125849) do
  # These are extensions that must be enabled in order to support this database
  enable_extension "plpgsql"
  create_table "contacts", force: :cascade do |t|
    t.string   "firstname"
    t.string   "surname"
    t.string   "email"
    t.integer  "phone"
    t.datetime "created_at",         null: false
    t.datetime "updated_at",         null: false
    t.string   "image_file_name"
    t.string   "image_content_type"
    t.integer  "image_file_size"
    t.datetime "image_updated_at"
  end
  create_table "users", force: :cascade do |t|
    t.string   "email",                  default: "", null: false
    t.string   "encrypted_password",     default: "", null: false
    t.string   "reset_password_token"
    t.datetime "reset_password_sent_at"
    t.datetime "remember_created_at"
    t.integer  "sign_in_count",          default: 0,  null: false
    t.datetime "current_sign_in_at"
    t.datetime "last_sign_in_at"
    t.inet     "current_sign_in_ip"
    t.inet     "last_sign_in_ip"
    t.datetime "created_at",                          null: false
    t.datetime "updated_at",                          null: false
  end
  add_index "users", ["email"], name: "index_users_on_email", unique: true, using: :btree
  add_index "users", ["reset_password_token"], name: "index_users_on_reset_password_token", unique: true, using: :btree
end

基本上联系人表中没有user_id。这是用于定义与用户的关系的外键。添加列,然后在创建联系人时,将用户id添加到联系人表中的user_id列中。那就行了。

相关内容

最新更新