0

在设计的编辑页面中,我使用回形针放置图像上传器。
如果我尝试将 image_tag 放在这里,它会像这样返回错误。

NoMethodError in Registrations#edit 
undefined method `photo' for #<ActionView::Helpers::FormBuilder:0x000000210752d0>

我有 Devise 使用的“用户”模型。
并且用户有一个“用户配置文件”模型。
在“UserProfile”中,我将 :photo 添加到 attr_accessible。我还将它添加到“UserProfile”模型中以使用回形针

  has_attached_file :photo,
    :styles => {
    :thumb=> "100x100>",
    :small  => "400x400>" } 

我的编辑视图是

<% resource.build_user_profile if resource.user_profile.nil? %>
<%= form_for(resource, :as => resource_name, :url => registration_path(resource_name), :html => { :method => :put }) do |f| %>
  <%= devise_error_messages! %>

    <%= f.fields_for :user_profile do |profile_form| %>

      <div><%= profile_form.label :nickname %><br /> 
      <%= profile_form.text_field :nickname %></div> 

      <div><%= profile_form.label :photo %><br /> 
      <%= profile_form.file_field :photo %></div>

     <% if profile_form.photo.exists? then %>
      <%= image_tag profile_form.photo.url %>
      <%= image_tag profile_form.photo.url(:thumb) %>
      <%= image_tag profile_form.photo.url(:small) %>
     <% end %>
   <% end %> 

...continue on
4

2 回答 2

0

尝试将新建的 user_profile 实际分配给一个变量:

<% user_profile = resource.build_user_profile if resource.user_profile.nil? %>

然后将该变量传递给 fields_for ,如下所示:

<%= f.fields_for user_profile do |profile_form| %>

或者

<%= f.fields_for :user_profile, user_profile do |profile_form| %>

我相信这应该有效吗?

于 2012-07-19T14:06:06.733 回答
0

要制作嵌套表单,请在您的父模型(用户)中添加此

accepts_nested_attributes_for :photos

这允许您一次性传递与照片模型和用户相关的参数。Rails 制作了一个特殊的哈希键,用于存储具有名称的照片模型的值:

photos_attributes

现在,当您执行@user = User.new params[:user] 时,它还会构建@user.photos

此外,在您的用户控制器新方法中,添加:@user.photo.build

请参阅 ryan bates 的这个很棒的 railscast 以获得完整的解释: http ://railscasts.com/episodes/134-paperclip

这也可能有用: http ://api.rubyonrails.org/classes/ActiveRecord/NestedAttributes/ClassMethods.html

于 2012-08-05T17:17:07.497 回答