Ruby on rails 3 不进行更新的字段\u

Ruby on rails 3 不进行更新的字段\u,ruby-on-rails-3,associations,Ruby On Rails 3,Associations,我认为这是一个愚蠢的错误…当我创建一个记录时,我的“资源”和“页面设置”表会被填充 但是当我试图更新记录时,我的“页面设置”没有任何作用 我的模型: class Resource < ActiveRecord::Base has_one :page_setting accepts_nested_attributes_for :page_setting end class PageSetting < ActiveRecord::Base belongs_to :resou

我认为这是一个愚蠢的错误…当我创建一个记录时,我的“资源”和“页面设置”表会被填充

但是当我试图更新记录时,我的“页面设置”没有任何作用

我的模型:

class Resource < ActiveRecord::Base
  has_one :page_setting
  accepts_nested_attributes_for :page_setting
end

class PageSetting < ActiveRecord::Base
  belongs_to :resource
end
类资源
以下是资源控制器:

class ResourcesController < ApplicationController
  # Initialize resource and belonging type model
  before_filter :build_resource_and_type, :only => [:new, :create]
  before_filter :get_resource_and_type, :only => [:edit, :update]

  def new
  end

  def create
    if @resource.save
      flash[:notice] = "Resource wurde erstellt"
      redirect_to root_url
    else
      flash[:error] = "Resource konnte nicht erstellt werden"
      render :action => 'new'
    end
  end

  def edit
  end

  def update
    if @resource.update_attributes(params[:resource])
      flash[:notice] = "#{@type_name} #{@resource.title} wurde aktualisiert"
      redirect_to root_url
    else
      flash[:error] = "#{@type_name} #{@resource.title} konnte nicht aktualisiert werden"
      render :action => 'edit'
    end
  end

  private
  def build_resource_and_type
    # Get type from URL param (new action) or hidden field param (create action)
    type = params[:type_name] || params[:resource][:type_name]

    @resource = current_user.microsite.resources.new(params[:resource])
    @resource.type_name = type

    # Build belonging model depending on type param
    case type
    when 'page'
      @resource.build_page_setting(params[:page_setting])
      @type_name = 'page'
    end
  end

  def get_resource_and_type
    @resource = current_user.microsite.resources.find(params[:id])
    @type_name = @resource.type_name
  end
end
class-ResourcesController[:new,:create]
在\u筛选器之前:获取\u资源和\u类型,:only=>[:编辑,:更新]
def新
结束
def创建
如果@resource.save
flash[:注意]=“资源wurde erstellt”
将\u重定向到根\u url
其他的
flash[:error]=“Resource konnte nicht erstellt werden”
呈现:操作=>“新建”
结束
结束
定义编辑
结束
def更新
if@resource.update_属性(参数[:resource])
flash[:notice]=“#{@type_name}{@resource.title}wurde-aktualisiert”
将\u重定向到根\u url
其他的
flash[:error]=“#{@type_name}{@resource.title}konnte nicht-aktualisiert-werden”
呈现:操作=>“编辑”
结束
结束
私有的
def构建资源和类型
#从URL参数(新建操作)或隐藏字段参数(创建操作)获取类型
type=params[:type_name]| | params[:resource][:type_name]
@resource=当前用户.microsite.resources.new(参数[:resource])
@resource.type_name=type
#根据类型参数构建归属模型
案例类型
当“翻页”
@资源.生成页面设置(参数[:页面设置])
@键入_name='page'
结束
结束
def get_资源_和_类型
@resource=当前用户.microsite.resources.find(参数[:id])
@type\u name=@resource.type\u name
结束
结束
以及我的资源表单的基本部分:

<%= form_for @resource do |resource_form| %>
  <%= resource_form.hidden_field :type_name, :value => @type_name %>
  …
  <%= fields_for @resource.page_setting do |page_form| %>
    <%= page_form.label :content, "Text" %>
    <%= page_form.text_area :content %>
  <% end %>
<% end %>

@键入\u名称%>
…

您必须对资源表单进行一个小的更改:

<%= form_for @resource do |resource_form| %>
  <%= resource_form.hidden_field :type_name, :value => @type_name %>
  …
  <%= fields_for @resource.page_setting do |page_form| %>
    <%= page_form.label :content, "Text" %>
    <%= page_form.text_area :content %>
  <% end %>
<% end %>


然后它应该可以工作,就像你想的那样。

当我将@resource.page\u setting.update\u attributes(params[:page\u setting])添加到我的更新操作中时,它可以工作……但是我认为它应该可以工作,没有这个“解决方法”?这没有什么区别,我仍然必须“手动”更新页面设置在资源控制器中。您能否在一些简单的示例中调试并显示
params
update
开始时的样子?