Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/56.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails Rails3在保存操作中使用父值嵌套属性_Ruby On Rails_Ruby_Ruby On Rails 3 - Fatal编程技术网

Ruby on rails Rails3在保存操作中使用父值嵌套属性

Ruby on rails Rails3在保存操作中使用父值嵌套属性,ruby-on-rails,ruby,ruby-on-rails-3,Ruby On Rails,Ruby,Ruby On Rails 3,我的rails3应用程序中有一个简单的嵌套表单。我正在尝试解决如何在保存时将父模型中的值保存到子模型中 class Radcheck < ActiveRecord::Base set_table_name 'radcheck' attr_accessible :attribute_name, :username, :value, :op belongs_to :raduser end class Raduser < ActiveRecord::Base has_

我的rails3应用程序中有一个简单的嵌套表单。我正在尝试解决如何在保存时将父模型中的值保存到子模型中

class Radcheck < ActiveRecord::Base
  set_table_name 'radcheck'
  attr_accessible :attribute_name, :username, :value, :op
  belongs_to :raduser  
end

class Raduser < ActiveRecord::Base
  has_many :radcheck, :dependent => :destroy
  accepts_nested_attributes_for :radcheck  
end

也在radusers中尝试过,但出现了错误。

看起来您发布的控制器代码是针对Radcheck控制器的,对吗?如果是这样,您发布的表单将使用
RaduserController
类的
create
操作,而不是
RadcheckController
中的操作。这可以解释为什么在radcheck行中看不到用户名“123”

如果父级和子级之间的用户名字段相同,则同步这两个字段的常用方法是在保存前使用观察者或
回调。在保存之前,我将在下面概述
方法:

class Radcheck < ActiveRecord::Base
  set_table_name 'radcheck'
  attr_accessible :attribute_name, :username, :value, :op
  belongs_to :raduser

  before_save :sync_usernames

private

  def sync_usernames
    self.username = self.raduser.username
  end
end
class-Radcheck

我已经用Rails 3.1测试过了,它可以正常工作;但是,我知道在以前版本的Rails中,在访问子模型中的父模型时遇到了问题。在这种情况下,我必须先在父模型上执行
操作,然后再保存
,并让它在每个子模型上迭代,这样设置适当的属性。

你能输入你尝试过的控制器代码吗?@naren sisodiya。当然,刚刚更新。似乎用户名是radcheck表的一列(查看模型和控制器代码)…在您的视图代码中,它被视为一列用户table@rubyprince没错-他们都有那个专栏-我在使用一个遗留数据库,无法更新我在3.1.1上-我在raduser的日志中得到了一个插入,但看起来radcheck中没有任何内容。JStrangely,它现在起作用了。我有点担心,我没有做太多来让它继续下去。感谢您的分类:)它确实看起来很奇怪,它最初不起作用,然后突然开始起作用。在不了解您的设置的情况下,我只能猜测为什么会发生这种情况。不管怎么说,很高兴听到它现在对你起作用了。我也不太喜欢间歇性问题!!再次感谢:)
def create
      @radcheck = Radcheck.new(params[:radcheck])
      @radcheck.username = '123'
      respond_to do |format|
        if @radcheck.save

          format.html { redirect_to @radcheck, notice: 'Radcheck was successfully created.' }
          format.json { render json: @radcheck, status: :created, radcheck: @radcheck }
        else
          format.html { render action: "new" }
          format.json { render json: @radcheck.errors, status: :unprocessable_entity }
        end
      end
    end
class Radcheck < ActiveRecord::Base
  set_table_name 'radcheck'
  attr_accessible :attribute_name, :username, :value, :op
  belongs_to :raduser

  before_save :sync_usernames

private

  def sync_usernames
    self.username = self.raduser.username
  end
end