助手"fields_for"不工作 [英] Helper "fields_for" not working

查看:68
本文介绍了助手"fields_for"不工作的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我使用的是嵌套属性,但是字段未加载到我的视图中. 有人知道我想念什么吗?

I'm using nested attributes, but the fields aren't loaded in my view. Someone know what I missing?

Rails 3.1,Ruby 1.9.2

模型1:

class Traditions::Material < ActiveRecord::Base
  has_one :material_asset, :dependent => :destroy
  validates_presence_of :title
  accepts_nested_attributes_for :material_asset
end

模型2:

class Traditions::MaterialAsset < ActiveRecord::Base
  belongs_to :material
  has_attached_file :asset
  validates_attachment_presence :asset
end

查看(HAML):

= form_for @material, :html => {:class => 'form', :multipart => true} do |f|
    = errors_for @material

    .field
        = f.label :title
        = f.text_field :title

    .field
        = f.label :description
        = f.text_area :description, :rows => 5

    .field
        = f.fields_for :material_asset do |ma|
            = ma.label :asset
            = ma.file_field :asset

    .buttonrow
        = f.submit 'Save'

结果HTML(部分):

Result HTML (part):

<div class='field'></div>
<div class='buttonrow'>
  <input name="commit" type="submit" value="Save" />
</div>

在上面,div.field为空.

推荐答案

我偶然发现了您的 rails问题,它似乎不是在您的new操作中构建嵌套资源.

I stumbled across this from your rails issue, which appears to be not building the nested resource in your new action.

您要在控制器中呼叫build_material_asset吗?那可以解释为什么没有渲染字段.如果嵌套对象是nil,则没有对象可为其呈现字段.

Are you calling build_material_asset in your controller? That could explain why the fields aren't getting rendered. If the nested object is nil, there are no object to render fields for.

尝试这样的事情:

class MaterialsController < ApplicationController
  def new
    @material = Traditions::Material.new
    @material.build_material_asset
  end
end

这篇关于助手"fields_for"不工作的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆