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 什么?

我的电话号码控制器:

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

所以我有 Error Called id for nil ...

我通过将变量添加到 new_telnumber_path 来解决它

<%= link_to '新电话', 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

默认情况下,您的每个控制器都继承自您的ApplicationController. 您可以在before_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 回答