0

私はHartlを通して働いています。第 10 章のマイクロポストのセクションにたどり着きましたが、マイクロポストの代わりにホテルを紹介したので、このチュートリアルのように別の住所モデルに追加したいと思います。問題が発生しています - ビュー フィールドにアドレスが入力されていないようです

<%= 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

私の質問は次のとおりです。住所を表示するにはどうすればよいですか?

4

1 に答える 1

0

新しいオブジェクトの作成と同時に関連付けを作成するには、新しいメソッドで関連付けられたアドレスを作成する必要があります。(より正確には、オブジェクトが作成された直後)。

その件については、優れた Railscast を確認してください。 Part 1 Part 2 .

于 2013-05-02T21:03:29.710 に答える