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

标签 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_many :radcheck, :dependent => :destroy
  accepts_nested_attributes_for :radcheck  
end

还有我的表格:

<%= form_for @raduser do |f| %>  
  <p>  
    <%= f.label :username %><br />  
    <%= f.text_field :username %>  
  </p>  
  <%= f.fields_for :radcheck do |builder| %>  
  <li>  
    <%= builder.label :attribute_name %><%= builder.text_field :attribute_name %>  

  </li>  
  <% end %>  
  <p><%= f.submit "Submit" %></p>  
<% end %>

我想要做的是在保存时将 Raduser.username 值保存到 radcheck 表中。对于每条记录。

我试过在 Controller 中放置一些东西,但这对我们来说并没有真正起作用。

-- 更新--

在我的 radcheck Controller 中,我已经尝试过这个(作为测试)但是值没有保存。

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

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

最佳答案

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

如果用户名字段在父项和子项之间是相同的,那么同步这两者的常用方法是使用观察者或 before_save 回调。我将在下面概述 before_save 方法:

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

我已经用 Rails 3.1 测试过它,它可以工作;但是,我知道我在以前版本的 Rails 中访问子模型中的父模型时遇到了问题。在那些情况下,我必须将 before_save 操作放在父模型上,并让它遍历每个子模型,以这种方式设置适当的属性。

关于ruby-on-rails - Rails3 嵌套属性在保存操作中使用父值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8211205/

相关文章:

ruby-on-rails - 简单表单集合 - 下拉菜单

ruby-on-rails - 从表单值 ruby​​ on rails 更新模型数据

ruby - 为什么在 ruby​​/rails/activerecord 中并不总是需要 self?

ruby-on-rails - Rails——如何将 HAML 部分的 HTML 输出保存为字符串以发送到外部服务?

ruby 字符串连接(我认为?)

ruby-on-rails - 带有rails runner的未定义方法

ruby-on-rails - 找不到托盘, 'id' =

ruby-on-rails - 使用电子表格将文件写入excel的问题

ruby-on-rails - 在 Rails 3 路由中重命名路径助手

ruby-on-rails - 如何修复 Heroku 上的日期方法关闭问题?