0

私はソーシャル ネットワークを持っており、そのために搬送波を使用しています。ユーザーが写真をアップロードするためにギャラリー名を作成する必要がないように、設定についてサポートが必要です。これがcarrierwave のデフォルト設定ですが、これはソーシャル ネットワークであるため、ユーザーが異なるギャラリー (またはアルバム) を持つことは許可していません。プロフィールに写真をアップロードするためのリンクのみが必要です。では、これをどのように攻撃すればよいのでしょうか。ところで、私は Rails を初めて使用するので、すべての助けをいただければ幸いです。

写真コントローラー:

  def new
    @photo = Photo.new(:gallery_id => params[:gallery_id])
  end

  def create
    @photo = Photo.new(params[:photo])
    if @photo.save
      flash[:notice] = "Successfully created photos."
      redirect_to @photo.gallery
    else
      render :action => 'new'
    end
end

  def edit
    @photo = Photo.find(params[:id])
  end

  def update
    @photo = Photo.find(params[:id])
    if @photo.update_attributes(paramas[:photo])
      flash[:notice] = "Successfully updated photo."
      redirect_to @photo.gallery
    else
      render :action => 'edit'
    end
  end

  def destroy
    @photo = Photo.find(params[:id])
    @photo.destroy
    flash[:notice] = "Successfully destroyed photo."
    redirect_to @photo.gallery
  end
end

ギャラリーコントローラー:

  def index
    @galleries = Gallery.all
  end

  def show
    @gallery = Gallery.find(params[:id])
  end

  def new
    @gallery = Gallery.new
  end

  def create
    @gallery = Gallery.new(params[:gallery])
    if @gallery.save
      flash[:notice] = "Successfully created gallery."
      redirect_to @gallery
    else
      render :action => 'new'
    end
  end

  def edit
    @gallery = Gallery.find(params[:id])
  end

  def update
    @gallery = Gallery.find(params[:id])
    if @gallery.update_attributes(params[:gallery])
      flash[:notice] = "Successfully updated gallery."
      redirect_to gallery_url
    else
      render :action => 'edit'
    end
  end

  def destroy
    @gallery = Gallery.find(params[:id])
    @gallery.destroy
    flash[:notice] = "Successfully destroy gallery."
    redirect_to galleries_url
  end
end

ルート:

Dating::Application.routes.draw do
  get 'signup' => 'users#new'
  get 'login' => 'sessions#new'
  get 'logout' => 'sessions#destroy'
  get 'edit' => 'users#edit'
  get "/profile/:id" => "users#show"
  get "profile/:id/settings" => 'users#edit'
  match 'settings/:id' => 'users#settings'

  resources :users
  resources :sessions
  resources :password_resets
  resources :galleries
  resources :photos
  resources :searches

  resources :users do  
      get 'settings', on: :member  
  end

  root to: 'users#new'
  root to: 'galleries#index'

  resources :users do |user|
    resources :messages do
      collection do
        post 'delete_multiple'
      end
    end
  end
4

3 に答える 3

2

私が見る限り、 zwippie の答えは良い選択肢です。

zwippie の回答に従う場合は、次のように写真コントローラーを変更する必要があります。

def new
  @photo = Photo.new
end

def create
  @photo = Photo.new(params[:photo])
  @photo.gallery = current_user.gallery
  if @photo.save
    flash[:notice] = "Successfully created photos."
    redirect_to gallery_path @photo.gallery
  else
    render :action => 'new'
  end
end

まったく別のオプションは、ギャラリーを生成せず、現在のユーザーを写真に関連付けるだけです。

ユーザーモデル:

class User < ActiveRecord::Base
  has_many :photos
end

class Photos < ActiveRecord::Base
  belongs_to :user
end

photos_controller

def new 
  @photo = Photo.new
end

def create
  @photo = Photo.new(params[:photo])
  @photo.user = current_user
  if @photo.save
    flash[:notice] = "Successfully created photos."
    redirect_to user_photos_path(current_user)
  else
    render :action => 'new'
  end
end

Carrierwave セットアップのギャラリー名として、たとえば現在のユーザー名などを選択できます。

更新:リダイレクト パスを変更しました

ルートは次のようになります。

resources :users do
  resources :photos
end
于 2013-04-25T17:56:43.683 に答える
0

ユーザーがサインアップした直後にギャラリーを作成しないのはなぜですか? または、ユーザーが最初の画像をアップロードするときに作成します。

photos_controller:

def new
  # Get the gallery for the current user (assuming Gallery has attribute user_id)
  @gallery = current_user.gallery

  # Create a new gallery if user does not have one already
  @gallery = Gallery.create(:user_id => current_user.id) if @gallery.nil?

  # Save the photo
  @photo = Photo.new(:gallery_id => @gallery.id)
end
于 2013-04-25T14:35:14.093 に答える