【问题标题】:Paperclip - attaching notes to images回形针 - 将注释附加到图像
【发布时间】:2023-03-25 15:35:01
【问题描述】:

我刚接触回形针,一直在尝试网络上的一些示例。

我一直在学习“使用 Rails 和 Paperclip 上传多张图片”的教程,并设法创建了一个可以包含多张照片的相册模型。

现在我希望用户为每张照片附加注释,这样每次用户上传照片时,他也可以在该照片旁边添加注释。

我做的第一件事是创建一个 photonotes 表及其模型,然后创建 'Photo' 模型和 'Photonote' 模型之间的关系。

class Photo < ActiveRecord::Base
  belongs_to :album

  has_many :photonotes, :dependent => :destroy
  #accepts_nested_attributes_for :photonotes  

  def photonote_attributes=(photonote_attributes)
    photonote_attributes.each do |attributes|
    photonotes.build(attributes)
    end
 end

  has_attached_file :data,
  :styles => {
    :thumb => "50x50#",
    :large => "640x480#"
  }

  validates_attachment_presence :data
  validates_attachment_content_type :data, 
  :content_type => ['image/jpeg', 'image/pjpeg', 
                                   'image/jpg', 'image/png']
end

我在“_photo.html.erb”部分中包含了 fields_for 部分,以允许用户向照片添加注释。

--- 相册控制器
定义新 @album = 新专辑 1.upto(3) { 照片 = @album.photos.build 照片.photonotes.build } respond_to 做 |格式| format.html # new.html.erb format.xml { 渲染 :xml => @album } 结尾 结束

每次我创建相册并添加带有注释的图像时,都会收到以下错误消息: “出了点问题!”...

欢迎提出任何建议。作为 RoR 的新手,如果这个问题有点愚蠢,对不起:)

【问题讨论】:

    标签: ruby-on-rails


    【解决方案1】:

    接受nested_attributes_for 就快完成了。在我的脑海中,您的表单应该看起来像这样。

    = form_for @photo, :url => album_path(@album), :html => { :multipart => true } do |f|   
      = f.file_field :photo
      = f.fields_for :photonotes, @album.photo_notes.build do |f_pn|
        = f_pn.text_area :whatever_your_note_field_is_called
    

    顺便说一句,用户是否需要为每张照片上传许多注释?如果不是,则取消一对多并将字段添加到照片本身。

    【讨论】:

    • 嗨,谢谢您的回复。请注意,我的相册不使用嵌套属性的照片,这是我卡住的地方:(
    • 对不起,我没有说完我的句子:我不知道你在遵循什么教程,但怀疑它是针对在接受嵌套属性存在之前的旧版本的 rails 的。真的我不明白你为什么不使用它,因为它真的很容易。
    • 你是对的,我会尝试使用accept_nested属性。非常感谢您的建议:)
    【解决方案2】:
    <% fields_for "album[photo_attributes][]", photo do |p| %>
      <p>
        <%= p.label :Photo %><br />
        <%= p.file_field :data, :index => nil %>
    
    
    <% fields_for "photo[photonote_attributes][]", photonote do |builder| %>
    <%= builder.text_field :note %>
    <% end %>
    
      </p>
    <% end %>
    

    上面是我使用的代码,但它不起作用..

    编辑

    我觉得应该是这样的:

    <% fields_for "album[photo_attributes][photonote_attributes][]", photonote do |builder| %>
    <%= builder.text_field :note %>
    <% end %>
    

    【讨论】:

    • 我编辑了一些你可以尝试的东西。你是双重嵌套,所以照片注释参数需要在照片参数内,在相册参数内。
    • 非常感谢,我尝试按照你的建议使用 Accept_nested_attributes,效果很好:) 确实,它确实让事情变得更容易,非常感谢你
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-10-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-03-03
    • 1970-01-01
    相关资源
    最近更新 更多