首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >更新has_one关联模型

更新has_one关联模型
EN

Stack Overflow用户
提问于 2014-01-21 08:45:19
回答 2查看 327关注 0票数 0

我有两个模特:

代码语言:javascript
复制
Student > belongs_to Locker
Locker  > has_one    Student

有了这个协会,我就得去储物柜给它分配一个学生,或者如果我要改变这个协会,我可以去找学生,给他分配一个储物柜。

这才是可行的,我也明白。但是,目前我的设置如下所述。

现在,当然,有一个想法,这将是超级酷,直接分配一个储物柜给一个学生,我正在创建(新学生)。

因此,在这种情况下,我确实有储物柜,但学生目前不在场,当它被创建时,从储物柜到这个学生的联系也应该被创建。因此,实际上会创建一个ID XXX的新学生,但同时这个ID也应该转到一个储物柜及其student_id属性。

我绞尽脑汁如何处理这个问题,因为我发现这些选项并没有真正做到这一点(我正在使用simple_form ):-使用关联- accepts_nested_attributes

唯一的办法,我看到它以某种方式发送假身份证(attr_accesor)选定的储物柜id到学生模型,创建学生,写下它的id,找到储物柜,更新这个新的id。

但这感觉又奇怪又不对。

有人能给我指明正确的方向吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-01-21 09:10:08

如果您的关联配置正确,那么您的学生表中就有一个:locker_id,因此您可以简单地在新的学生表单上有一个选择框。

代码语言:javascript
复制
<% form_for @student do |form| %>
  <%= form.input :name %> # etc...
  <%= form.collection_select(:locker_id, @unassigned_lockers, :id, :name) %>
  <%= form.submit %>
<% end %>

这是一个非常简单和标准的案例,除非你没有告诉我们一些事情。

注意,我已经抛出了一个@unassigned_lockers对象,而不是执行Locker.all,因为您可能希望在这里有一些逻辑,在下拉列表中只显示未分配的储物柜。

由于您还没有按照最初描述的方式设置您的关系,所以如果不手动处理,您就不能向学生提交:locker_id。作为一个快速建议:

代码语言:javascript
复制
<% form_for @student do |form| %>
  <%= form.input :name %> # etc...
  <%= collection_select_tag(:locker_id, @unassigned_lockers, :id, :name) %>
  <%= form.submit %>
<% end %>

select标记现在将在params中单独通过,您将需要修改您的create方法以找到储物柜并更新其学生id:

代码语言:javascript
复制
def create
  @student = Student.new(params[:student])
  if @student.save
    Locker.find(params[:locker_id]).update_attribute(:student, @student)
  end
end

当然,这需要一些错误捕获和细化,但是应该让您开始。

票数 1
EN

Stack Overflow用户

发布于 2014-01-21 09:04:23

没有尝试解决方案,但您确实立即想起了after_create,after_update:

学生:

代码语言:javascript
复制
after_create :update_locker
after_update :update_locker

 private

  def update_locker
    Locker.update(self.locker_id, :student_id => self.id)
  end

当然,我现在对储物柜的验证有问题,因为如果我选择一个已经使用过的储物柜,并通过我的解决方案来更新它,那么只有一个学生可以拥有储物柜,而不是more.Currently,我得到了成功更新的学生信息,但是储物柜没有更新。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/21253112

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档