【问题标题】:Rails not assigning proper idsRails 没有分配正确的 id
【发布时间】:2016-05-30 20:26:09
【问题描述】:

我有一个带有service_providerservice 模型的程序。 service_provider 使用 has_many 属性,service 模型使用 belongs_to 属性。 service_provider 是使用设计创建的。我无法在create 方法中为服务分配service_provider_id

services_controller.rb中的create方法

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

rails 控制台为每个服务提供service_provider_id: nil

这是schema.rb,其中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`

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

我尝试重新启动服务器并重置数据库,但没有成功。

【问题讨论】:

  • current_service_provider 的代码在哪里?
  • devise当前登录的service_provider的助手
  • 一切正常,尝试从service.rbrake db:migrate 中删除attr_accessor,然后重新启动你的服务器。
  • 很好的调用 @7urkm3n,attr_accessor 可能会覆盖 Rails 设置器。
  • 感谢@7urkm3n 完美运行。我可以选择评论作为答案吗?我是 stackoverflow 的新手

标签: ruby-on-rails ruby ruby-on-rails-3 ruby-on-rails-4 devise


【解决方案1】:

只是为了从service.rb 中删除attr_accessor :service_provider_id

rake db:migrate 然后rails s

正如@Petr 提到的那样,它会覆盖(第二次为nil 调用它)。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多