![](/img/trans.png)
[英]Getting a name error when seeding a database in ruby on rails. How do I include app context?
[英]Rails. Catch 22 issue seeding database
我的rails應用程序具有User
和InviteCode
模型。 InviteCode
belongs_to
User
要創建新用戶,需要有效的invite_code
。 但是要創建這樣的代碼,首先需要一個User
,這是因為belong_to關系的緣故。
我的問題是,我該如何播種數據庫?
編輯以添加模型外觀
class InviteCode < ActiveRecord::Base
belongs_to :user
validates :user_id, presence: true
validates :code, presence: true
end
class User < ActiveRecord::Base
has_many :invite_codes, dependent: :destroy
attr_accessor :invite_code
validate :invite_code_valid, :on => :create
def invite_code_valid
@invite_code = InviteCode.find_by_code(self.invite_code)
if @invite_code.nil?
self.errors.add(:invite_code, "invalid")
end
end
end
對,這樣一個用戶可以用邀請代碼邀請其他用戶嗎? 用戶需要邀請碼才能注冊嗎?
從用戶刪除驗證,並擁有一個表單對象
class SignUpsController
def new
@sign_up = SignUp.new
end
def create
@sign_up = SignUp.new(sign_up_params)
if @sign_up.save
redirect_to @sign_up.user
else
render :new
end
end
end
模型
class SignUp
include ActiveModel::Model
attr_accessor :invite_code_code, :name
validates :invite_code, presence: true
validates :name, presence: true
def invite_code
InviteCode.find_by(code: invite_code_code)
end
def user
@user ||= User.new(name: name)
end
def save
return unless valid?
user.save
end
end
視圖
<%= form_for @sign_up, url: sign_ups_path do |f| %>
<div class="field">
<%= f.label :invite_code_code, "Invite Code" %>
<%= f.text_field :invite_code_code %>
</div>
<div class="field">
<%= f.label :name %>
<%= f.text_field :name %>
</div>
<% end %>
現在,因為該驗證的SignUp
不是用戶模型,你可以創建一個沒有邀請碼的用戶。 這樣做可能更好,因為您可以刪除舊的邀請碼,並且如果用戶要更新其個人資料,則不會出現沒有邀請碼的錯誤
另一種方法是直接播種而不驗證種子文件中的任何內容
u = User.new(name: "Joe")
u.save(validate: false)
上面的答案是正確的,但是對於其他可能偶然發現並希望播種數據庫的人而言。 seed.rb文件與schema.rb和migration文件夾一起位於db文件夾中。 它的運行就像一個紅寶石程序。 這是一個了解更多信息的好資源: http : //www.xyzpub.com/en/ruby-on-rails/3.2/seed_rb.html
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.