在Devise的编辑页面中,我使用回形针放置图像上传器 如果我尝试将image_tag放在这里,它会像这样给出错误。
NoMethodError in Registrations#edit
undefined method `photo' for #<ActionView::Helpers::FormBuilder:0x000000210752d0>
我有'用户'模型,由Devise使用。
用户有一个'UserProfile'模型
在'UserProfile'中,我添加了:照片到attr_accessible。
我还将其添加到'UserProfile'模型以便使用paperclip
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
答案 0 :(得分: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| %>
我认为应该有用吗?
答案 1 :(得分: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