0

いくつかの計算による私の方法では、データを取得し、それをビューで表示する必要がありますが、

@ar.each do |a|

レコードが1つしかない場合はエラーが発生し、エラーが1つしかない場合もそれぞれが悪い考えです。では、これをどのように行うのですか?

だから私はメソッドにそのようなコードを持っています:

non_original = []
@articles.each do |a|
  non_original << get_non_tecdoc("LA44", 1, "KNECHT")
end
@non_original = non_original

get_non_tecdocはオブジェクトを返すか、何も返しません。

だから私は持っています:

-@non_original.each do |no|
      =no.brand
      =no.description
      =no.price
      =no.quantity

ただし、@ non_originalにレコードが1つある場合は、@non_original.eachでエラーが発生します。では、チェックインビューを行う方法は?@non_originalに単純な@non_original.brandなどよりも1つのレコードがある場合、ただし複数の場合は、各ループを使用しますか?

4

5 に答える 5

3

これは、@arを単一の値および配列として機能します。

Array(@ar).each do |a|
  p a
end

これArrayカーネルのメソッドです。

于 2012-10-17T21:06:18.527 に答える
2
<%= debug @ar %>

これにより、ビューで確認できる優れたYAML形式が提供されます(ERBを想定)。

編集:あなたはデバッグに興味がないので、これがあなたが望むものだと思います。

コントローラで、splat演算子を使用して、シングルトン要素を配列に変換します(配列は変更されません)。

@ar = *@ar

その後@ar.each、あなたのビューで期待どおりに動作します。

または、ビューをチェックインすることもできます。

<% if @ar.is_a?(Array) %>
  <% @ar.each ... %>
<% else %>
  <%= @ar %>
<% end%>
于 2012-10-17T21:07:54.803 に答える
0

@arが配列である限り、エラーは発生しません。1つのレコードを返す場合は、それを1つのレコードを持つ配列に変更します。

「where」句のようなアクティブレコードクエリインターフェイスを使用している場合。0個以上のactive_recordオブジェクトを含む配列を返します。findを使用すると、active_recordオブジェクトのインスタンスが1つ返されます。

したがって、クエリを実行するメソッドがアクティブレコードのwhere句を使用している場合、@arは常に配列を返す必要があります。

于 2012-10-17T21:58:59.973 に答える
0

@ ar.inspectを使用してコンソールに出力し、インスタンス変数の内容を確認してみませんか。

于 2012-10-17T21:04:16.843 に答える
-1

これを試してください:

Tablename.find_by_table_id

例:

account_idが10の場合、次の例を見てください。

@getResults = Account.find_by_account_id(10)

それは単一のレコードを与えます。@ getResults.id、@getResults.nameを使用して値を取得できます。

于 2012-10-17T21:08:13.947 に答える