从数据库记录到数组

时间:2015-03-31 18:08:50

标签: ruby ruby-on-rails-4 sqlite

我想通过索引页面上的按钮从数据库中检索特定记录,并将该对象存储在临时数组中,然后在特定视图上显示对象的属性。但是find方法的记录没有存储在变量中,我不知道为什么......我收到的错误是nil:NilClass。(在我的项目中,我希望能够为一个有序的患者列表一天并在视图中显示它们

这是我的代码:

patient_index.html.erb(来自脚手架)
  <tbody>
<% @patients.each do |patient| %>
  <tr>
    <td><%= patient.name %></td>
    <td><%= patient.last_name %></td>        
    <td><%= patient.id %></td>
    <td><%= link_to 'Show', patient %></td>
    <td><%= link_to 'Edit', edit_patient_path(patient) %></td>
    <td><%= link_to 'Destroy', patient, method: :delete, data: { confirm: 'Are you sure?' } %></td>
    <td> <%= button_to 'Order', order_path(id: patient)%></td>
    <th><%= @temp[0].name %></th> #testing if it shows the value here
  </tr>
<% end %>

的routes.rb

post 'order', to: 'patients#order'

patients_controller.rb

    def index
    @patients = Patient.all
    end

    def show 
    end 

    def edit ... #generated by scaffold

    def destroy ...

    def update ...

   def order
    @temp = []
    @the_patient = Patient.find(params[:id])
    @temp << @the_patient

    redirect_to patients_url

    end

错误图片链接http://imgur.com/nJdyR2E(略有不同的名字..我用我的语言获取代码和变量)

感谢您的帮助和建议:)

1 个答案:

答案 0 :(得分:0)

没有足够的信息告诉您,但您可能正在做什么

redirect_to patients_url

在您的#order行动中,但您的意思是:

redirect_to patient_url

这将是您的#show行动。我知道你使用的是另一种语言。也许问题是多元化错误?

如果没有,请点击这里:

您正在尝试构建未定义@temp的索引页面。想一想,你需要索引,所以它构建了索引页面。那个时候@temp是什么?在您点击按钮之前它不会被设置,因为#index没有定义按钮,因此该按钮尚未存在。但即使在#order中定义后,您也会重定向到#index,然后重置为[]。您需要重新构建您的应用。一个简单的黑客方法是重定向到一个新页面,该页面包含@temp所拥有的代码,并从@temp中引用#index

遵循:

patients_url -> index action -> patients_url with button press -> 
  order action -> order_display_url