2013-05-02 40 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