2016-05-30 50 views
0

我有一個程序service_providerservice模型。該service_provider使用has_many歸因和service模型使用belongs_to歸因。 service_provider是使用設計創建的。我無法將service_provider_id分配給create方法中的服務。Rails沒有分配正確的ID

services_controller.rb

def create 
    @service = Service.new(service_params) 
    @service.service_provider_id = current_service_provider.id  
    respond_to do |format| 
     if @service.save 
      format.html { redirect_to @service, notice: 'Service was  successfully created.' } 
      format.json { render :show, status: :created, location: @service } 
     else 
      format.html { render :new } 
      format.json { render json: @service.errors, status: :unprocessable_entity } 
     end 
    end 
end 

創建方法導軌控制檯提供service_provider_id: nil爲每個服務。

這裏就是service_provider_id使用遷移 「t.belongs_to :service_provider, index: true

create_table "service_providers", 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.string "current_sign_in_ip" 
    t.string "last_sign_in_ip" 
    t.datetime "created_at",       null: false 
    t.datetime "updated_at",       null: false 
end 

add_index "service_providers", ["email"], name: "index_service_providers_on_email", unique: true 
add_index "service_providers", ["reset_password_token"], name: "index_service_providers_on_reset_password_token", unique: true 
create_table "services", force: :cascade do |t| 
    t.integer "service_provider_id" 
    t.string "service_name" 
    t.text  "description" 
    t.integer "price" 
    t.string "location" 
    t.datetime "created_at",   null: false 
    t.datetime "updated_at",   null: false 
end 

add_index "services", ["service_provider_id"], name: "index_services_on_service_provider_id" 

這裏的service.rb模型

class Service < ActiveRecord::Base 
    attr_accessor :service_provider_id 
    belongs_to :service_provider 
    validates_presence_of :description, :location, :service_name, :price 
end 

和「service_provider.rb`創建schema.rb

class ServiceProvider < ActiveRecord::Base 
    has_many :services 
    # Include default devise modules. Others available are: 
    # :confirmable, :lockable, :timeoutable and :omniauthable 
    devise :database_authenticatable, :registerable, 
    :recoverable, :rememberable, :trackable, :validatable 
end 

我嘗試重新啓動服務器並重置數據庫沒有運氣。

+0

'current_service_provider'的代碼在哪裏? –

+0

這是[devise](https://github.com/plataformatec/devise)助手當前登錄的service_provider – Ritwick

+1

一切看起來不錯,嘗試從'service.rb'和'rake db:migrate'中刪除'attr_accessor'然後重新啓動yr服務器。 – 7urkm3n

回答

0

剛剛從service.rb

rake db:migrate然後rails s

刪除attr_accessor :service_provider_id作爲@Petr提到它覆蓋(稱之爲第二次爲nil)。