0

私はコードでビューを持っています:

   <section>
  <h1>
    <%= render @client %>
  </h1>
  <h2>
    <%= render @client.telnumbers %>
  </h2>
  <h3>
    <%= link_to 'New Tel', new_telnumber_path, :locals => { :client => @client }, :remote => true %>
  </h3>
</section>

しかし、私のTelnumbersコントローラー-変数@client-nilでは@clientは何を見ることができますか?

私のTelnumbersコントローラー:

class TelnumbersController < ApplicationController
  def new
    @telnumber = Telnumber.new
    @telnumber.client_id = @client.id 
  end

  def create
    @telnumber = Telnumber.new(params[:telnumber])
    render :action => :new unless @telnumber.save
  end
end

だから私はnilのIDと呼ばれるエラーがあります...

new_telnumber_pathに変数を追加して解決しました

<%= link_to'新しいTel'、new_telnumber_path(:client_id => @ client.id)、:remote => true、:class =>'btn btn-small'%>

そしてコントローラーで:

  def new
    @telnumber = Telnumber.new
    @client = Client.find(params[:client_id]) 
    @telnumber.client_id = @client.id 
  end

ありがとう!

4

1 に答える 1

3

すべてのコントローラーは、デフォルトでから継承しますApplicationControllerbefore_filter多くの(またはすべての)コントローラーで使用する変数を割り当てる場所をそこに置くことができます。

次に例を示します。

class ApplicationController < ActionController::Base
  before_filter :set_client

  private

  def set_client
    # set the @client variable: load client from session or whatever your app logic is
  end
end

Railsのコントローラーフィルターについて詳しくは、http://guides.rubyonrails.org/action_controller_overview.html#filtersをご覧ください。

于 2013-03-25T09:04:16.040 に答える