0

アルバムモデルと写真モデルを作成し、既存のレールアプリケーションに追加しました。私は写真モデルをアルバムモデルに属し、アルバムモデルはユーザーモデルに属する既存のプロファイルモデルに属しています。私はそれらが間違っていて、なぜ私は間違いを起こしているのか分かりません。このモデルの関連付けを修正するにはどうすればよいですか?

URL /アルバムに行くと、すべてがうまくいくように動作しますが、URL/profiles/1に移動すると、すべて動作します(以下のコードはviews/profileのshow.html.erbファイルに貼り付けられます)。 /フォルダー)、私は以下のエラーが表示されます。

これは私が解決できない単純な問題です。 4つのモデルファイルは以下の通りです:

Album.rb:

class Album < ActiveRecord::Base 
    belongs_to :profile 
    has_many :photos, :dependent => :destroy 
    accepts_nested_attributes_for :photos, :allow_destroy => true 
end 

Profile.rb:

​​

Photo.rb:

require 'paperclip' 
class Photo < ActiveRecord::Base 

    belongs_to :album 
    has_attached_file :upload, 
       :url => "/images/:id/:style/:basename.:extension", 
       :path => ":rails_root/public/images/:id/:style/:basename.:extension", 
       :styles => { 
        :thumb => "75x75>", 
        :small => "200x200>" 
       } 
    #add in any validations you may want 
end 

User.rb:

class User < ActiveRecord::Base 

    include Gravtastic 
    gravtastic :size => 120 

    # associations 
    has_many :albums 
    has_many :photos, :through => :albums 
    has_many :authorizations, :dependent => :destroy 
    has_one :profile, :dependent => :destroy 
    has_many :resumes, :dependent => :destroy, :order => 'created_at DESC' 
    has_many :thoughts, :dependent => :destroy, :order => 'created_at DESC' 
    has_many :user_threads, :dependent => :destroy, :order => 'created_at ASC' 

    accepts_nested_attributes_for :profile 

    # virtual attributes 
    attr_accessor :first_name, :last_name 

    # validations 
    validates_presence_of :first_name 
    validates_presence_of :last_name 
    validates_length_of :username, :minimum => 4, :message => " is too short" 
    validates :email, :email => {:message => " is not valid"} 
    validates_uniqueness_of :email, :case_sensitive => false 
    validates_uniqueness_of :username, :case_sensitive => false 
    validates_length_of :password, :minimum => 4, :message => " is too short" 

    # authlogic 
    acts_as_authentic do |config| 
    config.crypto_provider = Authlogic::CryptoProviders::MD5 
    config.maintain_sessions = false 
    config.validate_email_field = false 
    config.validate_login_field = false 
    config.validate_password_field = false 
    config.login_field = :email 
    config.validate_login_field = false 
end 

    def self.create_from_hash!(hash) 
    user = User.new(:username => Time.now.to_i, :email => '', :auth_provider => hash['provider']) 
    user.save(:validate => false) 
    if hash['provider'].downcase == 'twitter' 
    user.profile = Profile.create(:first_name => Twitter::Client.new.user(hash['user_info'] ['nickname'].to_s).name) 
else 
    user.profile = Profile.create(:first_name => hash['user_info']['first_name'], :last_name => hash['user_info']['last_name']) 
end 
user 
end 

    def deliver_password_reset_instructions! 
    reset_perishable_token! 
    UserMailer.deliver_password_reset_instructions(self) 
    end 

    def activate! 
    self.active = true 
    save(false) 
    end 

    def deliver_activation_instructions! 
    reset_perishable_token! 
    UserMailer.deliver_activation_instructions(self) 
    end 

end 

プロファイルコントローラは、このスニペットを持っています

def show 
    @user = User.find_by_username(params[:id]) 
    @profile = @user.profile 

    @location = Profile.get_location(@profile) 

    @resumes = @user.resumes 

    @albums = @user.albums 

    @photos = @user.photos 

    @thoughts = @user.thoughts 

    @shouts = UserThread.find_profile_shouts(@profile) 

    @shouters = UserThread.find_shouters(@shouts) 

    @user_thread = UserThread.new 
    end 

ビューがこれを持っている:

<div id="profile_right_col"> 
    <h2>Albums</h2> 
    <p> 
     <b>Name:</b> 
     <%= @albums %><br /> 

     <% @albums.photos.each do |photo| %> 
     <h3><%= photo.title %></h3> 
     <%= image_tag photos.upload.url(:small) %> 
     <% end %> 
    </p> 

    <%= link_to 'Edit', edit_album_path(@albums) %> | 
    <%= link_to 'Back', albums_path %> 
</div> 

アクションコントローラの例外が示しています

ActiveRecord::StatementInvalid in Profiles#show 

Showing /Users/pawel/Ruby/Apps/cvf/app/views/profiles/show.html.erb where line #137 raised: 

SQLite3::SQLException: no such column: albums.user_id: SELECT  "albums".* FROM  "albums" WHERE  ("albums".user_id = 4) 

Extracted source (around line #137): 

<h2>Albums</h2> 
<p> 
<b>Name:</b> 
<%= @albums %><br /> 

<% @albums.photos.each do |photo| %> 
<h3><%= photo.title %></h3> 

答えて

0

Paperclip::Railtie.insertをapplication.rbに追加した後で動作しました。

0

あなたはあなたのショーで定義された@album変数を持っていけません(あなたは@albumsと@albums配列を通過する必要があるビューの中にあります)。したがって、その価値はゼロであり、メソッド写真はありません。

+0

申し訳ありませんが、私はタイプミスでした。私はそれを編集しました。 – Simpleton

+0

@albumsは配列なので、 '@ albums.each'を使って調べる必要があります。 – Hck

+0

'SQLite3 :: SQLException:そのような列はありません:albums.user_id:SELECT "albums"。* FROM "albums" WHERE( "albums" .user_id = 4) - これをどのように移行しますか?ありがとう – Simpleton

関連する問題