0

問題があります。'User' モデルと 'Professional' モデルを取得しました。Professional モデル内では、ユーザーに属することが指定されています。

ただし、ユーザーモデルには記述関係がありません。ユーザーは専門家を持つことができますが (begs_to のおかげで)、常にそうとは限りません。

ここに問題があります: "User.find(49).professional" を実行して、ユーザー n°49 がプロフェッショナルかどうかをテストすることはできません (ブール値を返す必要があります)。

ただし、「Professional.find(65).user」を実行できます。プロの n°65 がユーザーである場合は true を返し、そうでない場合は false を返します。

一部のユーザービューでは、これが原因で機能しません。

- if @user.professional?
  div class="page-header"
    h1 Professional info
  ul style="list-style: none"
  // Id
  li
    strong
      = model_class.human_attribute_name(:id)
      ' :
    = @user.professional.id
  // Country
  li
    strong
      = model_class.human_attribute_name(:country)
      ' :
    = @user.professional.country

[...]

幅広い「li」リストを取得しました。そのため、if 条件は機能せず、@user.professional.someprofessionalattributes も機能しません。

最初は User モデルに「has_none_or_one」と書こうかと思ったのですが、公式ドキュメントを見たら存在しませんでした。

ご協力いただきありがとうございます

4

2 に答える 2

4

has_one 1 か 0 かの関係ですユーザーに対応する専門家がいない場合、その専門家はnilです。

于 2013-01-16T17:30:26.317 に答える
1

たとえば、「has_one」に使用します。

この関係を作成します

モデル User では:

class User < ActiveRecord::Base
 has_one :professional, :dependent => :destroy
end

プロフェッショナルモデルで

class User < ActiveRecord::Base
 #add this parameter in yours attributes
 attr_accessible :user_id

 belongs_to :user
end

インデックス ユーザーを Professional モデルに追加します (移行を作成します)。

rails g migration addIdUserToProfesional

作成された移行でこれを追加します

class addIdUserToProfesional < ActiveRecord::Migration
  def change
    add_column :professionals, :user_id, :integer
    add_index :professionals, :user_id
  end
end

pdt: 申し訳ありませんが、私の英語はまだあまり上手ではありません。よろしくお願いします。

于 2013-01-16T17:45:43.523 に答える