我的应用程序设置为用户注册时,为他们创建了配置文件,因此我在配置文件的模型上使用before_create :build_profile
和外键user_id
。
用户模型:
...
has_one :profile
before_create :build_profile #-> inbuilt method
...
现在我有两种注册类型:reg1和reg2。 Reg2只能有一个公司简介,所以这里有问题。我可以在注册期间根据用户注册类型建立公司资料吗?这是图片:
用户模型:
...
before_create :build_profile #-> inbuilt method
has_one :company
# before_create :build_company if registration_id == 2
...
注册模型的创建方式如下:
Registration.create(name: 'foo', company_id: 2)
用户表具有外键:
...
:registration_id => :integer,
...
因此,当创建用户并将其注册设置为2时,我想运行:build_company
。这可能吗?
我的回答的理由,请纠正我!!
我的设计registration_controller.rb:
def create
super do |resource|
if params[:registration_id]
resource.registration_id = params[:registration_id]
if resource.registration_id == 2
resource.save
elsif resource.registration_id == 1
resource.save!
end
end
end
end
我的注册视图表单有这个hidden_field:
<%= hidden_field_tag 'registration_id', params[:registration_id] %>
所以请告诉我为什么要投票?
答案 0 :(得分:-1)
您可以使用Ruby ActiveRecord::Callbacks来执行创建用户之前或之后发生的事情。您需要在用户保存到数据库后创建的用户ID,您需要使用...
after_save :create_company # no need for this (updated)
has_one :profile
has_one :company
before_create :build_profile #-> inbuilt method
def create_company
if self.registration_id == 2
c = Company.new(user_id: self.id, registration_id: 2) #assigns the user_id to company.
c.save
end
end
...
回调:
<强> User.rb:强>
user.rb
重启我的服务器后,我现在看到了错误。很奇怪它如何工作直到重新启动。不管怎样,我已经看到了你们所说的话,抱歉这么天真。我从registration_controller.rb
删除了该方法并更改了def create
super do |resource|
if params[:registration_id]
resource.registration_id = params[:registration_id]
if resource.registration_id == 2
resource.save!(Company.create(user_id: User.last.id, registration_id: 2))
elsif resource.registration_id == 1
resource.save!
end
end
end
end
:
int main(int argc, char *argv[])
{
FILE* fp = fopen("test.txt","rw");
int n,m,q;
scanf(" %d%d%d",&n,&m,&q);
struct test_t test;
while (fscanf(fp,"%d%s%d%d%d%d%d%d%d%*d",&test.line,test.data,&test.number[0],&test.number[1],&test.number[2],&test.number[3],&test.number[4],&test.number[5],&test.number[6])!=EOF) {
//do something.....
}
return 0;
}