【问题标题】:Ruby on rails .try() not working correctlyRuby on rails .try() 无法正常工作
【发布时间】:2013-02-18 11:26:28
【问题描述】:

我正在尝试执行以下操作:

    <%= order.user.try(:first_name) %>
    <%= order.user.try(:last_name) %>
    <%= order.user.try(:email) %>

但是,当我查看此页面的索引时,这有效,数据不会出现在表中。我也查看了日志,看到相关数据正在发布中

在 2013-02-18 11:15:02 +0000 开始为 127.0.0.1 发布“/orders” OrdersController#create 作为 HTML 参数处理: {"utf8"=>"?", "authenticity_token"=>"Rjf7+Z8UAPh9ZofIrOs+p6AoGPfgd/6rfdTRqJLtx0g=", "user"=>{"first_name"=>"Test", "last_name"=>"TestHome", "email"=>"test@test.com"}, "order"=>{"address"=>"3433234243", "card_number"=>"45423554213994", "card_type"=>"visa", "card_expires_on(1i)"=>"2013", "card_expires_on(2i)"=>"2", "card_expires_on(3i)"=>"1"}, "commit"=>"确认订单"} 购物车加载 (0.0ms) SELECT carts.* FROM carts WHERE carts.id = 8 LIMIT 1

所以我也尝试过这样做

    <%= order.user.first_name %>
    <%= order.user.last_name %>
    <%= order.user.email %>

这样做会导致

NoMethodError in Orders#index

Showing C:/Users/sites/e-smart/app/views/orders/index.html.erb where line #18 raised:

undefined method `first_name' for nil:NilClass

我知道这个错误的结果是因为first_name 是空的。

获取数据的最佳方式是什么。

Order.rb

class Order < ActiveRecord::Base
  attr_accessible :address, :card_expires_on, :card_type, :ip_address, :card_number, :first_mame, :last_name, :email, :quantity
  belongs_to :cart 
  has_many :line_items, :dependent => :destroy   
  belongs_to :user

用户.rb

class User < ActiveRecord::Base

  has_and_belongs_to_many :roles
  has_many :role_users
  has_many :orders

【问题讨论】:

  • 你可以试试

标签: ruby-on-rails ruby-on-rails-3


【解决方案1】:

你是说:

我知道这个错误的结果是因为 first_name 是空的。

这是不正确的。错误的原因是用户为零。这也符合try()返回-blank-的行为。

确保您的订单包含正确填写的用户。这意味着您的订单表必须有一个 user_id 并且必须正确分配用户。

【讨论】:

    【解决方案2】:

    您在这里比较两个不同的东西 - try 在您看来工作正常,当您在 nil 上调用它时它返回 nil(undefined method 'first_name' for nil:NilClass 是因为 order.user 是 nil,而不是因为 first_name 是无。

    这与您的 POST 无关 - 您在这里尝试解决的实际问题是什么?

    【讨论】:

      【解决方案3】:

      让我先澄清一下这个错误的含义。

        NoMethodError in Orders#index
      
        Showing C:/Users/sites/e-smart/app/views/orders/index.html.erb where line #18 raised:
      
        undefined method `first_name' for nil:NilClass
      

      上述错误并不意味着用户的first_name为空,而是用户对象本身为nil。这意味着,您的 @order.user 为 nil 而不是 @order.user.first_name 为空。

      所以,order.user.try(:first_name) 应该被读作 如果有一个用户与该订单相关联,则打印下这个订单的用户的名字,否则什么都不做,但不抛出任何错误

      表单中的参数已正确发送到您的控制器,可能是您在控制器中缺少与订单和用户记录相关联的某些内容。查看保存对象的控制器操作,确保正确关联订单和用户。

      希望对你有帮助

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-10-29
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多