2016-08-10 7 views
1

私はレールが新しく、アパートに関する情報を格納する不動産アプリケーションを作成しています。複数の画像をレールでリソースに保存する方法

私はアパートモデル、ビュー、そしてコントローラーを持っていますので、CRUDアパートメントを利用できます。

ここで、アパートに複数の画像を追加する機能を追加したいと思います。

gem carrierwave、mini_magick、およびfogの宝石をインストールしました。

画像(文字列)列とapartment_id(整数)列を持つ画像モデルを作成しました。次に、ImageとApartmentの間にbelongs_to/has_many関係を作成しました。

質問:「アパートメントの作成」ビューで画像モデルのインスタンスを作成するにはどうすればよいですか?

私はアパートのコントローラでは、このような何かをしたいと仮定と思いますが、私はよく分からない:

def new 
    @apartment = Apartment.new 
    end 

    def create 
    @apartment = current_user.apartments.new(apartment_params) 
    **@image = @apartment.images.new(?)** 

    if @apartment.save **&& @image.save** 
     flash[:notice] = "Congratulations! Your apartment has been added." 
     redirect_to apartments_path 
    else 
     flash[:error] = "There was an error saving your listing. Please try again." 
     render :new 
    end 
    end 

private 

def apartment_params 
    params.require(:apartment).permit(:street, :from_date, :to_date, :to_date_open, :flex_dates, :price, :price_neg, :agent_fee, :furnished, :package, :flights, :beds, :baths, :description) 
end 

また、私はビューにコードを変更するかどうかはわかりません。

<%= form_for(@apartment) do |f| %> 
    <% if @apartment.errors.any? %> 
    <div id="error_explanation"> 
     <ul> 
     <% @apartment.errors.full_messages.each do |message| %> 
     <li><%= message %></li> 
     <% end %> 
     </ul> 
    </div> 
    <% end %> 

    <div class="field"> 
    <%= f.label :street %><br> 
    <%= f.text_field :street %> 
    </div> 

    **<div class="field"> 
    <%= f.label :picture %> 
    <%= f.file_field :picture %> 
    <%#= f.hidden_field :picture_cache %> 
    </div>** 

新しいアパートメントの作成中に画像を追加する方法についてのガイダンスは素晴らしいものです。

ありがとうございます!

答えて

0

これまで私がこの問題に近づいてきたのは、2つのモデルが2つあります。私はギャラリーであるモデルと写真であるモデルを作成します。

写真には、名前や説明が気になる情報がたくさんあります。写真はギャラリーにリンクしているので、それが属するギャラリーを知ることができます。

ギャラリーには名前があり、アパートメントへのリンクがあります。私は写真をギャラリーなどで一番最初に選んでいるような特別なことをしたい場合に備えて、それを分けるのが好きです。

あなたが気にしなければ、簡単に写真で別の荒涼としたモデルを作り、それにそれを与えることができます。

私は後で写真のアップロードを扱いますが、アパートの一覧表示の開始時ではなく、マンションのリストへの障壁が低いときに、より多くの投資をするのに役立ちます。

ですから、ギャラリーでそれをやっている場合、私は実行するコマンドは、あなたが持っているだろう

rails g scaffold gallery name:string apartment:belongs_to

rails g scaffold photo name:string information:text photo_url:string gallery:belongs_to

または全くギャラリー

rails g scaffold photo name:string information:text photo_url:string apartment:belongs_to

であります写真のモデルとコントローラーを更新してこれでも。

+0

ありがとう@salinn !!あなたが関係を説明したやり方は役に立ちます。あなたは写真とギャラリーのためのcrudを実装するためにアパートコントローラを更新する方法について私にガイダンスを与えることができるでしょうか? –

+0

@NechamaGoldmanだから私はあなたがアパートのコントローラで何かを更新する必要はないと述べた方法。あなたがすることはあなたの通常のステップを経てコントローラのショーページに進み、写真セクションを追加して写真用のフォームを置くことです。私は個人的にここにギャラリーが必要とは思わない。それは理にかなっていますか? –

関連する問題