0

私はこれについていくつかの投稿を見つけましたが、私がこれまでに取り組んだことは何もしていません。私はまだRailsにかなり慣れていません。基本的には、HTMLとCSSに精通していますが、Skillshare Railsクラスを受講し、それをRailstutorialの本と組み合わせる作業をしています。だから優しくしてください。

「アイテム」を作成できるユーザーがいる基本的なアプリがあります。私は足場を使って「アイテム」を立ち上げました。それらはマイクロポストである可能性もあります。しかし、scaffoldが作成するビューを使用して、電子メールアドレスではなくユーザーの電子メールアドレスを表示したいと思いました。モデル、ビュー、コントローラーで何を変更しますか?これが私が持っているものです。

コントローラ:

def email
  @email = @item.user_id.email
end

見る:

<td><%= item.content %></td>
<td><%= @email %></td>
<td><%= link_to 'Show', item %></td>
<td><%= link_to 'Edit', edit_item_path(item) %></td>
<td><%= link_to 'Destroy', item, confirm: 'Are you sure?', method: :delete %></td>

アイテムモデル:

class Item < ActiveRecord::Base
  attr_accessible :content, :user_id
  validates :content, :length => { :maximum => 140 }
  belongs_to :user
end

ユーザーモデル:

class User < ActiveRecord::Base
  # Include default devise modules. Others available are:
  # :token_authenticatable, :confirmable,
  # :lockable, :timeoutable and :omniauthable
  devise :database_authenticatable, :registerable,
     :recoverable, :rememberable, :trackable, :validatable

  # Setup accessible (or protected) attributes for your model
  attr_accessible :email, :password, :password_confirmation, :remember_me
  has_many :items
end
4

2 に答える 2

1

これには 3 つの方法があります。

まず、私が感じる最高の方法。あなたの要件によると、単純な委任です。

class Item < ActiveRecord::Base
  attr_accessible :content, :user_id
  validates :content, :length => { :maximum => 140 }
  belongs_to :user

  delegate :email, to: :user
end

ビューでは、

電話するだけです。

<td><%= item.email %></td>

@clusterが言ったように

コントローラーで使用できます

@email = @item.user.email

または

コードを Item Model に移動

class Item < ActiveRecord::Base
  attr_accessible :content, :user_id
  validates :content, :length => { :maximum => 140 }
  belongs_to :user

  def user_email
    user.email
  end
end

ビューでは、

<td><%= item.user_email %></td>
于 2013-02-23T11:37:32.667 に答える
0

コントローラーでは、別のメソッドを追加したくありません。これらのメソッドは、ユーザーが URL 経由でアクセスできる「アクション」であるためです。(たとえばフィルターの前に行う場合もありますが、ここでは範囲外です)。

コントローラーアクションでこれを行うことができます

class ItemsController
  def show
    @item = Item.find params[:id]
    @email = @item.user.email
  end
end

@item.user.emailまたは、単にビュー自体を呼び出すこともできます。

于 2013-02-23T03:37:07.060 に答える