1

現在、写真をアップロードするためのアプリを作成しようとしています。ユーザー、アルバム、写真があります。問題は、各アルバムに複数の所有者が存在する可能性があることです。そのため、アルバムを作成するフォームには、友人の名前を強調表示して所有者になるように「招待」するチェック ボックス部分があります。ただし、所有権を共有する前に招待を「受け入れる」必要があるようにしようとしています。album_user結合テーブル ( )を使用しalbumてこれを実行しようとしていpending_albumます:status

これは私の

albums/new.html.erb (ここでは問題ありません)

<%= form_for ([@user, @album]), :html => { :id => "uploadform" } do |f| %>
<div class="formholder">
    <%= f.label :name %>
    <%= f.text_field :name %>

    <br>
    <label>Hosts</label>
    <% @user.friends.each do |friend| %>
    <%= friend.name %>
    <%= check_box_tag 'album[user_ids][]', friend.id, @album.users.include?(friend) %>
    <% end %>

    <%= f.label :description %>
    <%= f.text_area :description %>

    <br>

    <%=f.submit %>
</div>
<% end %>

アルバム コントローラー (ここでステータスを発行)

def create
  @user = User.find(params[:user_id])
  @album = @user.albums.build(params[:album].merge(:status => 'accepted'))
  @friends = @user.friends.find(params[:album][:user_ids])
  if @user.save
    for friend in @friends
      AlbumUser.create({:user_id => friend.id, :album_id => @album.id, :status => 'pending'})
      # friend.albums.build(params[:album].merge(:status => 'pending'))
    end
    redirect_to user_album_path(@user, @album), notice: 'Album was successfully created.'
  else
    render action: "new"
  end
end

ユーザーモデル

class User < ActiveRecord::Base

has_secure_password
attr_accessible :email, :name, :password, :password_confirmation, :profilepic
validates_presence_of :password, :on => :create

validates_format_of :name, :with => /[A-Za-z]+/, :on => :create
validates_format_of :email, :with => /\A([^@\s]+)@((?:[-a-z0-9]+\.)+[a-z]{2,})\Z/i, :on => :create
validates_length_of :password, :minimum => 5, :on => :create
# validates :album, :uniqueness => true

has_many :album_users
has_many :albums, :through => :album_users, :conditions => {status: 'accepted'}
has_many :pending_albums, :through => :album_users, :source => :album, :conditions => {status: 'pending'}
accepts_nested_attributes_for :albums

has_many :friendships, :dependent => :destroy
has_many :friends, :through => :friendships, :conditions => "status = 'accepted'"
has_many :requested_friends, :through => :friendships, :source => :friend, :conditions => "status = 'requested'", :order => :created_at
has_many :pending_friends, :through => :friendships, :source => :friend, :conditions => "status = 'pending'", :order => :created_at

has_attached_file :profilepic

before_save { |user| user.email = email.downcase }

def name_with_initial
  "#{name}"
end

private

  def create_remember_token
    self.remember_token = SecureRandom.urlsafe_base64
  end

終わり

アルバムモデル

class Album < ActiveRecord::Base
  attr_accessible :name, :description, :user_ids, :status
  validates_presence_of :name

  has_many :album_users
  has_many :users, :through => :album_users
  has_many :photos

end

album_user モデル

class AlbumUser < ActiveRecord::Base
  attr_accessible :album_id, :user_id, :status
  belongs_to :album
  belongs_to :user
end

ここでの問題: users/show.html.erb (各アルバムのアイコンがありますが、アルバムが作成されているときにpending_album、:status が「保留中」であっても s として保存されていないようです。

    <% @user.pending_albums.each do |pending_album| %>
        <div class="albumthumb">
            <%= link_to image_tag(pending_album.photos ? pending_album.photos.first.avatar.url(:medium) : ("questionmark.png"), :size => "150x150"), user_album_path(@user, pending_album) %>
            <br>
            <%= pending_album.name %>
            <% if signed_in? %>
            <%= form_for(:album_user, :url => user_albums_path(:user_id => current_user.id, :album_id => pending_album.id)) do |f| %>
            <%= f.submit "Accept Invitation" %>
            <% end %>
            <% end %>
        </div>
    <% end %>
    <% @user.albums.each do |album| %>
        <div class="albumthumb">
            <%= link_to image_tag(!album.photos.empty? ? album.photos.first.avatar.url(:medium) : ("questionmark.png"), :size => "150x150"), user_album_path(@user, album) %>
            <br>
            <%= album.name %>
        </div>
    <% end %>

私の問題は、アルバムが pending_albums として保存されていないことです。ユーザー モデルの :conditions は、どれがアルバムでどれが保留中のアルバムかを区別するのに役立つと思いましたか? 保留中のはずなのに、すべてがアルバムに分類されているようです。誰でも助けることができますか?

4

0 に答える 0