显示平板电脑中包含的信息 "belongs to" 并将其放入视图循环中

Displaying info contained in a tablet it "belongs to" and putting it in a view loop

我搜索了这个答案,但在堆栈溢出中找不到它。

这是我的问题。

咯咯声属于用户。 一个用户有很多咯咯声

我希望能够在循环中显示来自另一个 table 的数据,该数据与其有活动记录关系。

当我在循环中显示 gurgles 自己的 index.html.erb 并仅检索它自己的 table 信息时,它工作正常。

但是当我尝试检索 gurgle 所属用户的信息时,它会抛出错误。

这里有些东西我只是没有得到,我希望有人能提供帮助。 我收到很多不同的错误,具体取决于我如何更改它,但就目前而言,这是我现在收到的错误...

目前不喜欢@user.email...

Gurgles 中的 NoMethodError # 索引 # User::ActiveRecord_Relation 的未定义方法“电子邮件” 提取的源代码(大约第 17 行):

      <tr>
        <td><p><%= image_tag("zombie_profile.png", width: '100px') %><%= gurgle.status %></p></td>
        <td><p><%= @user.email %></p></td>
      </tr>
    </tbody>
</table>

这是我的代码:

我的咯咯声模型文件...

class Gurgle < ApplicationRecord
  belongs_to :user, foreign_key: "user_id"


end

我的用户模型(此处使用设计引擎)...

class User < ApplicationRecord

  has_many :gurgles
  has_one :profile

  # Include default devise modules. Others available are:
  # :confirmable, :lockable, :timeoutable and :omniauthable
  devise :database_authenticatable, :registerable,
         :recoverable, :rememberable, :trackable, :validatable
end

我的 gurgle 控制器代码...

class GurglesController < ApplicationController
  before_action :set_gurgle, only: [:show, :edit, :update, :destroy]
  before_action :authenticate_user!

  layout 'gurgle'

  # GET /gurgles
  # GET /gurgles.json
  def index
    @gurgle = Gurgle.all


    @user = User.all

  end

  # GET /gurgles/1
  # GET /gurgles/1.json
  def show
  end

  # GET /gurgles/new
  def new
    @gurgle = Gurgle.new
  end

  # GET /gurgles/1/edit
  def edit
  end

  # POST /gurgles
  # POST /gurgles.json
  def create


    @user = User.find(current_user)
    @gurgle = @user.gurgles.new(gurgle_params)


    respond_to do |format|
      if @gurgle.save
        format.html { redirect_to @gurgle, notice: 'Gurgle was successfully created.' }
        format.json { render :show, status: :created, location: @gurgle }
      else
        format.html { render :new }
        format.json { render json: @gurgle.errors, status: :unprocessable_entity }
      end
    end
  end

  # PATCH/PUT /gurgles/1
  # PATCH/PUT /gurgles/1.json
  def update
    respond_to do |format|
      if @gurgle.update(gurgle_params)
        format.html { redirect_to @gurgle, notice: 'Gurgle was successfully updated.' }
        format.json { render :show, status: :ok, location: @gurgle }
      else
        format.html { render :edit }
        format.json { render json: @gurgle.errors, status: :unprocessable_entity }
      end
    end
  end

  # DELETE /gurgles/1
  # DELETE /gurgles/1.json
  def destroy
    @gurgle.destroy
    respond_to do |format|
      format.html { redirect_to gurgles_url, notice: 'Gurgle was successfully destroyed.' }
      format.json { head :no_content }
    end
  end

  private
    # Use callbacks to share common setup or constraints between actions.
    def set_gurgle
      @gurgle = Gurgle.find(params[:id])
    end

    # Never trust parameters from the scary internet, only allow the white list through.
    def gurgle_params
      params.require(:gurgle).permit(:status, :user_id)
    end
end

我的咯咯index.html.erb代码....

<p id="notice"><%= notice %></p>

<br />
<hr>

<table>
  <thead>
    <tr>
      <th colspan="3"></th>
    </tr>
  </thead>

  <tbody>
    <% @gurgle.each do |gurgle| %>
      <tr>
        <td><p><%= image_tag("zombie_profile.png", width: '100px') %><%= gurgle.status %></p></td>
        <td><p><%= @user.email %></p></td>
      </tr>
    </tbody>
</table>

<br />

<p><%= link_to 'Edit', edit_gurgle_path(gurgle), class: "gurgle-links" %> | <%= link_to 'Delete', gurgle, method: :delete, data: { confirm: 'Are you sure?' }, class: "gurgle-links" %></p>

<br />
<hr>

    <% end %>


<br />
<br />

<%= button_to 'New Gurgle', new_gurgle_path, class: "btn btn-primary", method: :get %>

最后是关于如何在数据库中设置我的 table 的模式....

ActiveRecord::Schema.define(version: 20170101132806) do

  create_table "gurgles", force: :cascade do |t|
    t.text     "status"
    t.integer  "user_id"
    t.datetime "created_at", null: false
    t.datetime "updated_at", null: false
    t.index ["user_id"], name: "index_gurgles_on_user_id"
  end

  create_table "profiles", force: :cascade do |t|
    t.string   "username"
    t.text     "about"
    t.integer  "user_id"
    t.datetime "created_at", null: false
    t.datetime "updated_at", null: false
    t.index ["user_id"], name: "index_profiles_on_user_id"
  end

  create_table "users", force: :cascade do |t|
    t.string   "email",                  default: "", null: false
    t.string   "encrypted_password",     default: "", null: false
    t.string   "reset_password_token"
    t.datetime "reset_password_sent_at"
    t.datetime "remember_created_at"
    t.integer  "sign_in_count",          default: 0,  null: false
    t.datetime "current_sign_in_at"
    t.datetime "last_sign_in_at"
    t.string   "current_sign_in_ip"
    t.string   "last_sign_in_ip"
    t.datetime "created_at",                          null: false
    t.datetime "updated_at",                          null: false
    t.index ["email"], name: "index_users_on_email", unique: true
    t.index ["reset_password_token"], name: "index_users_on_reset_password_token", unique: true
  end

end

我在这里做错了什么或遗漏了什么....

应该是:

<% @gurgle.each do |gurgle| %>
      <tr>
        <td><p><%= image_tag("zombie_profile.png", width: '100px') %><%= gurgle.status %></p></td>
        <td><p><%= gurgle.user.email rescue nil %></p></td>
      </tr>
<% end %>
  def index
    @gurgle = Gurgle.all
  end

在index.html.erb中尝试更新以下代码

<td><p><%= gurgle.user.email %></p></td>

使用 gurgle 对象,您可以访问用户电子邮件,因为您有关联,但有时会导致错误,因为您的 gurgle 数据不包含 user_id,因此它会抛出错误

从索引操作中删除@user