首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >通过复选框创建关联资源

通过复选框创建关联资源
EN

Stack Overflow用户
提问于 2012-08-08 10:01:19
回答 1查看 82关注 0票数 0

我试图让一个工程师在陆军表格中被一个复选框创建,但是它没有被创建。复选框的名称是siege,是我的Army模型的一部分:

models/army.rb

代码语言:javascript
复制
class Army < ActiveRecord::Base
 attr_accessible :siege
 attr_reader :siege
 validates_inclusion_of :siege, :in => [true, false]
 has_many :engineers

 def siege=(string_value)
   @siege = (string_value == '1')
 end
end

models/engineer.rb

代码语言:javascript
复制
class Engineer < ActiveRecord::Base
  belongs_to :user
  belongs_to :army
end

armies/new.html.erb

代码语言:javascript
复制
<%= form_for @army do |f| %>
  <%= f.check_box :siege %>
  <%= f.submit "Create Army" %>
<% end %>

controllers/armies_controller.rb

代码语言:javascript
复制
def new
  @army = Army.new
end

def create
  @army = current_user.armies.build(params[:army])
    if @army.save
      redirect_to new_army_path
    else
      render :new
    end
  end
end

models/army_observer.rb

代码语言:javascript
复制
class ArmyObserver < ActiveRecord::Observer
  def after_save(army)
    if army.siege
      Engineer.new({ :user_id => current_user.id, :army_id => :army_id })
    end
  end
end

军队是建立起来的,但工程师却没有。在我的代码中需要修正什么才能启用这个功能?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-08-08 10:23:10

在初始化记录后,您不会保存它:)

.new只是构建一个记录,而不是保存它。

在观察者中将new更改为create!

代码语言:javascript
复制
Engineer.new({ :user_id => current_user.id, :army_id => :army_id })

代码语言:javascript
复制
Engineer.create({ :user_id => current_user.id, :army_id => :army_id })

或者在创建记录之后保存它。

代码语言:javascript
复制
engineer= Engineer.new({ :user_id => current_user.id, :army_id => :army_id }) 
engneer.save

此外,您还需要在配置中有您的观察者寄存器,以使它能够侦听活动。

callbacks.html#registering-observers

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

https://stackoverflow.com/questions/11862112

复制
相关文章

相似问题

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