0

我创建了两个对象,然后使用 redirect_to 函数将它们传递给视图。
Order 对象在视图中很好并且可用,但 Message 对象属于 ActiveRecord::Relation 类型,并且对 message.variable 的任何调用都会得到 noMethodError。这是代码

控制器代码:

      @order = Order.create(order_params.merge(
        child: child, 
        address: prevOrderInfo.address,
        zipcode: prevOrderInfo.zipcode,
        user_facing_id: SecureRandom.uuid[0..7]))

      @message = Message.create(message_params.merge(:order_id => @order.id))

      redirect_to order_path(@order, @message)

查看检验报告

#order object
--- '#<Order id: 8, user_facing_id: "d1791380", product_id: 1, child_id: 2, shipping_name:
  "Marge Simpson", address: "742 Evergreen Terrace", zipcode: "58008", paid: true,
  created_at: "2019-09-30 19:29:01", updated_at: "2019-09-30 19:29:01">'
#message object
--- '#<ActiveRecord::Relation [#<Message id: 6, full_name: "Homer ", email: "homer@gmial.com",
  message: "This is a message", order_id: 8, created_at: "2019-09-30 19:29:01", updated_at:
  "2019-09-30 19:29:01">]>'

html.erb 使用 @order 就好了。 <%= @order.child.full_name %> 将“Maggie Simpson”放入网页

但是@message 的任何用法<%= @message.full_name %> 都会为 full_name 获取 noMethodError

不知道我在做什么,但为什么 Order 表的 create 调用会返回一种类型,而 Message 表会返回另一种类型?

4

1 回答 1

0

@message似乎是某种集合。您应该可以调用<%= @message.first.full_name %>,也可以对其进行迭代并执行以下操作:

<% @message.each do |msg| %>
  <%= msg.full_name %>
<% end %>

或者您可以更改代码以执行重定向,如下所示: redirect_to order_path(@order, message_id: @message.id)

在订单显示操作中,您将拥有:

@order = Order.find(params[:id])

@message = Message.find(params[:message_id])

使用这种方法,您将在视图中拥有一个@order对象和一个@message可用的对象。

我希望这有帮助。

于 2019-09-30T20:32:17.167 回答