Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

undefined method `tripphoto_changed?' for ... Carrierwave

I'm trying to save an image when adding a new Trip via an association.

tripphoto.rb has a belongs_to :trip

and my trip.rb has a has_many :tripphotos. Furthermore the Carrierwave documentation requires a few more things like an uploader and such which I've set up correctly (It worked without the association!).

Along with it I've got mount_uploader :tripphoto, TripphotoUploader in my trip.rb and accepts_nested_attributes_for :tripphotos, allow_destroy: true to get my form working properly as such:

    <%= fields_for :tripphotos do |photo| %>
      Img <%= photo.file_field :filename %>
    <% end %>

Nonetheless I get the error undefined methodtripphoto_changed?' for #`. A quick Google has no fitting result. Any advice?

P.S here's my Tripphoto table:

class Tripphoto < ActiveRecord::Base {
    :id => :integer,
    :filename => :string,
    :trip_id => :integer,
    :created_at => :datetime,
    :updated_at => :datetime
}

Thanks in advance,

Edit: On request my Codes:

Trip.rb

class Trip < ActiveRecord::Base
  attr_accessible :description, :title, :user_id, 
  :triplocations_attributes, :photo, :category_ids, 
  :start_city, :tripphotos, :img_url, :thumb_url, :images,
  :tags_attributes

  # validates :title, :length => {:minimum => 3}
  # validates :description, :presence => true
  # validates_associated :tags


  has_many :triplocations, :dependent => :destroy
  has_many :tripphotos, :dependent => :destroy

  has_and_belongs_to_many :categories
  has_and_belongs_to_many :tags


  accepts_nested_attributes_for :triplocations, allow_destroy: true
  accepts_nested_attributes_for :tripphotos, allow_destroy: true
  accepts_nested_attributes_for :categories
  accepts_nested_attributes_for :tags


  mount_uploader :tripphoto, TripphotoUploader
end

Tripphoto.rb

class Tripphoto < ActiveRecord::Base
  attr_accessible :filename, :trip_id
  belongs_to :trip
end

The complete trip form

<%= form_for @trip, :html => {:multipart => true} do |a| %> 
    <%= a.label :title, "Routetitel" %>
    <%= a.text_field :title %>

    <%= a.label :description, "Omschrijving" %>
    <%= a.text_area :description %>

    <%= a.label :start_city, "Stad" %>
    <%= a.text_field :start_city, :id => "cityName" %>

    <% for category in Category.find(:all) %>
        <div>
          <%= check_box_tag "trip[category_ids][]", category.id, @trip.categories.include?(category) %>
          <%= category.name %>
        </div>
    <% end %>
    <%= a.fields_for :tags do |f| %>
        <p>
            <%= f.label :title, 'Steekwoorden:' %>
            <%= f.text_field :title %>
        </p> 
        <div id="inputFields"></div>

    <% end %>
    <div style="background: red;">
        <%= fields_for :tripphotos do |photo| %>
          Img <%= photo.file_field :filename %>
        <% end %>
    </div>


    <%= a.submit 'Verstuur' %>
<% end %>
like image 416
CaptainCarl Avatar asked Dec 27 '22 15:12

CaptainCarl


2 Answers

I had the same problem,

For me it was that I forgot to ran:

bundle exec rake db:migrate

That was the reason about the youruploaderattributte_changed? Missing Method in the moodel.

like image 86
Jorge Sampayo Avatar answered Jan 06 '23 03:01

Jorge Sampayo


Two problems here :

  • you should mount the uploader on the field that will store the file name, the filename field in the Tripphoto model in that case, and not the tripphoto association.
  • you forgot the a. in front of fields_for, see what you did for the tags
like image 23
pjam Avatar answered Jan 06 '23 03:01

pjam