2

テーブル プロジェクトに 3 つの列があります。first_name、last_name、およびフルネーム。

<%= f.hidden_field :first_name, :value => current_user.firstname %>
<%= f.hidden_field :last_name, :value => current_user.lastname %>

ユーザーがプロジェクトを保存すると、ユーザーの名と姓が別々の列に保存されます。姓と名の両方を列のフルネームに保存して、後で検索できるようにしたいと考えています。

だから名前が

first_name = "Joe"
last_name = "Bloggs"

どうやって手に入れますか

fullname =  "Joe Bloggs"

これを試しましたが、うまくいきません。

<%=f.hidden_field :fullname, :value => :first_name + :last_name %>

誰かが私を正しい方向に向けることができますか? 私はレールに慣れていないので、助けようとするときはこれを覚えておいてください。ありがとう。

アップデート

これをプロジェクト モデルに追加しました。

def set_fullname
    fullname = first_name + last_name
  end

そして、私は今これを私の見解で呼んでいます:

<%= f.hidden_field :first_name, :value => current_user.firstname %>
<%= f.hidden_field :last_name, :value => current_user.lastname %>
<%= f.hidden_field :fullname, :value => @project.fullname %>

送信を押して、ログを確認すると、姓と名は通常どおりテーブルに保存されますが、氏名は空白になります。誰が問題が何であるかを見ることができますか?

更新2

意見:

<%= f.hidden_field :first_name, :value => current_user.firstname %>
<%= f.hidden_field :last_name, :value => current_user.lastname %>
<%= f.hidden_field :fullname, :value => @project.set_fullname %>

プロジェクト モデル:

def set_fullname
    fullname = first_name + last_name
  end

ページにアクセスしようとすると、このエラーが発生します。

undefined method `+' for nil:NilClass
4

2 に答える 2

7

フォームが読み込まれると、ビュー内の Ruby コードが実行されます。その時点では、フォームにはコンテンツがありません (新しいレコードを作成した場合)。JavaScript で同様のコードを記述し、それをonchangeイベントfirst_namelast_nameテキスト フィールドにマップすることは理にかなっています。

または、モデルのサーバー側で実行できます。たとえば、次のようになります。

class Person

  before :save, :set_fullname

  def set_fullname
    fullname = "#{first_name} #{last_name}"
  end
end

before :saveモデルを更新するたびに実行されます

とにかく、よりクリーンな解決策は、検索クエリを調整することです。この方法では、データベース内の情報を複製するだけです。

検索中に次のようなことを試してください:

"first_name LIKE ? or last_name LIKE ? or concat(last_name, ', ', first_name) LIKE ?"

この SQL コードはデータベースに依存している可能性があります。MySQL を使用している場合は、おそらく問題ありません。

于 2012-10-05T09:58:12.780 に答える
0

これはTombartによってすでに回答されていることは知っていますが、これは他の誰かを助けることができます.

class Person

  before_create do
    self.fullname = "#{first_name} #{last_name}"
  end
end

詳しくはRailsGuidesをご覧ください。

于 2015-02-03T10:39:42.787 に答える