2013-05-02 39 views
0

我正在通過Hartl進行工作。我已經到了第10章中的microposts部分,但我已經介紹了Hotels,而不是微博,現在我想將它們添加到單獨的地址模型中,如this tutorial。我有一些麻煩 - 我的視野不會出現輸入地址Rails 3.2呈現相同形式的相關模型

<%= form_for(@hotel) do |f| %> 
    <%= render 'shared/error_messages', object: f.object %> 
    <div class="field"> 
    <%= f.text_field :title, placeholder: "New hotel title..." %> 
    <%= f.text_area :room_description, placeholder: "About room..." %> 
    <%= f.text_field :price, placeholder: "Price?" %> 
    <%= f.check_box :include_breakfast%> 
    <%= f.label "Include breakfast?", class: "checkbox inline" %> 
<br><% ["1 star", "2 star", "3 star", "4 star", "5 star"].each do |item| %> 
    <%= f.radio_button :star_rate_hotel, item %> <%= item %><br /> 
<% end %> 
<% f.fields_for :address do |address| %> 
    <%= f.text_field :street, placeholder: "Street-address..." %> 
    <%= f.text_field :extended, placeholder: "Extended-address..." %> 
    <%= f.text_field :locality, placeholder: "Locality..." %> 
    <%= f.text_field :region, placeholder: "Region..." %> 
    <%= f.text_field :country, placeholder: "Country..." %> 
<% end %> 
<p> Upload photo hotel(optionaly) 
<%= f.file_field :photo %> 
    </div> 
    <p> 
    <%= f.submit "Post", class: "btn btn-large btn-primary" %> 
<% end %> 

我hotel_controller.rb

class HotelsController < ApplicationController 
    before_filter :signed_in_user, only: [:create, :destroy] 
    before_filter :correct_user, only: :destroy 

    def create 
    @hotel = current_user.hotels.build(params[:hotel]) 
    @hotel.build_address 
    if @hotel.save 
     flash[:success]="Hotel created!" 
     redirect_to root_url 
    else 
     @feed_items = [] 
     render 'static_pages/home' 
    end 
    end 

    def destroy 
    @hotel.destroy 
    redirect_to root_url 
    end 

    private 

    def correct_user 
    @hotel = current_user.hotels.find_by_id(params[:id]) 
    redirect_to root_url if @hotel.nil? 
    end 

end 

我user_controller.rb

class UsersController < ApplicationController 
    before_filter :signed_in_user, only: [:edit, :update, :index, :destroy] 
    before_filter :correct_user, only: [:edit, :update] 
    before_filter :admin_user, only: :destroy 

def show 
    @user = User.find(params[:id]) 
    @hotels = @user.hotels.paginate(page: params[:page], per_page: 3) 
end 

    def new 
    if signed_in? 
     redirect_to root_path 
    else 
    @user = User.new 
    end 
    end 

    def create 
    if signed_in? 
     redirect_to root_path 
    else 
    @user = User.new(params[:user]) 
    if @user.save 
     sign_in @user 
     flash[:success]="Welcome to the Hotel Advisor!" 
     redirect_to @user 
    else 
     render 'new' 
    end 
    end 
    end 

    def edit 
    end 

    def update 
    if @user.update_attributes(params[:user]) 
     flash[:success] = "Profile updated" 
     sign_in @user 
     redirect_to @user 
    else 
     render 'edit' 
    end 
    end 

    def index 
    @users = User.paginate(page: params[:page], per_page: 7) 
    end 

    def destroy 
    user = User.find(params[:id]) 
    if (current_user == user) && (current_user.admin?) 
     flash[:error] = "Can not delete own admin account!" 
    else 
     user.destroy 
    flash[:success]="User destroyed" 
    end 
    redirect_to users_url 
    end 

    private 

    def correct_user 
     @user = User.find(params[:id]) 
     redirect_to(root_path) unless current_user?(@user) 
    end 

    def admin_user 
     redirect_to(root_path) unless current_user.admin? 
     end 

end 

我的問題是:如何我是否顯示地址?

回答

0

您應該在新方法中創建關聯地址,以便在創建新對象的同時創建關聯。 (更確切地說,在創建對象之後)。

檢查有關該問題的優秀Railscasts Part 1Part 2