アルバムモデルと写真モデルを作成し、既存のレールアプリケーションに追加しました。私は写真モデルをアルバムモデルに属し、アルバムモデルはユーザーモデルに属する既存のプロファイルモデルに属しています。私はそれらが間違っていて、なぜ私は間違いを起こしているのか分かりません。このモデルの関連付けを修正するにはどうすればよいですか?
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>
申し訳ありませんが、私はタイプミスでした。私はそれを編集しました。 – Simpleton
@albumsは配列なので、 '@ albums.each'を使って調べる必要があります。 – Hck
'SQLite3 :: SQLException:そのような列はありません:albums.user_id:SELECT "albums"。* FROM "albums" WHERE( "albums" .user_id = 4) - これをどのように移行しますか?ありがとう – Simpleton