保华的Rails学习笔记

变量使用范围测试

def中定义的变量名,只能在它相应的acthion中使用,在其他页面不能用,例如在index中定义了@jobs = Job.all,那么@jobs这个变量只能在index action对应的页面index.html.erb中应用(当然了,其它action也可以重新定义@jobs这个变量并在相应的html.erb中使用)。def是局部变量,只在它对应的页面有效。
今天特意测试了一下:
在jobs_controller中

def index
@jo = Job.all
@job_count = Job.count
end

相应的index.html.erb中代码如下:

<div class="pull-right">
  <%= link_to("Add a job",new_job_path, :class => "btn btn-default") %>
</div>
<table class="table table-boldered">
  <% @jo.each do |job| %>
    <tr>
      <td>
        <%= link_to(job.title,job_path(job)) %>
      </td>
      <td>
        <%= job.created_at %>
      </td>
    </tr>
  <% end %>
</table>
<p>共<%= @job_count %>个职位</p>

教程上边之前一直用@jobs,还一直以为job_controller中必须要用@jobs这个固定变量,今天无意中把这个名字换了,程序依然是正常的,后来想想这里也只是一个变量而已,可以用其它名字,不一定每次都要用@jobs,而且这个变量,还不是一定要加s的,只要与index.html.erb中保持名字一样能调用出来数据就行。
因此controller的action(例如index action)中定义的变量,只能在相应的html.erb(例如index.html.erb)
中使用,而且是不管大小写的,只要两者保持一致就行

另外在show.html.erb中做了测试,直接使用controller中index action中定义的@jo变量,但是却提示出错


在show中重新定义了@jo变量,然后程序就正常了