Active Record与Host和Tours的模型/控制器关联

时间:2016-07-13 08:15:46

标签: ruby-on-rails devise

尝试使用多种方法来实现巡视与唯一主机的关联。

主机(用户)仅使用设计使用电子邮件和密码设置,稍后将添加更多配置文件数据字段。

为游览创建了所有相关的基本设置(仅限标题和文本字段),但只是希望在进一步移动游览布局之前使关联正常工作。

只有在主持人登录后才能创建游览。

注意:有关于代码行的注释#,因为我试图查看这些是否有效但没有成功。

以下是我的工作结构:

host.rb

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

  #before_save { |host| host.fullname }

  validates :email, presence: true #length: {maximum: 50}

  has_many :tours, dependent: :destroy
end

tour.rb

class Tour < ActiveRecord::Base

    belongs_to :host
    #validates :host_id, presence: true
    validates :title, presence: true, length: { minimum: 5 }
end

migrate:devise_create_hosts.rb

class DeviseCreateHosts < ActiveRecord::Migration
  def change
    create_table(:hosts) do |t|
      ## Database authenticatable
      t.string :email,              null: false, default: ""
      t.string :encrypted_password, null: false, default: ""

      ## Recoverable
      t.string   :reset_password_token
      t.datetime :reset_password_sent_at

      ## Rememberable
      t.datetime :remember_created_at

      ## Trackable
      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

      ## Confirmable
      # t.string   :confirmation_token
      # t.datetime :confirmed_at
      # t.datetime :confirmation_sent_at
      # t.string   :unconfirmed_email # Only if using reconfirmable

      ## Lockable
      # t.integer  :failed_attempts, default: 0, null: false # Only if lock strategy is :failed_attempts
      # t.string   :unlock_token # Only if unlock strategy is :email or :both
      # t.datetime :locked_at


      t.timestamps
    end

    add_index :hosts, :email,                unique: true
    add_index :hosts, :reset_password_token, unique: true
    # add_index :hosts, :confirmation_token,   unique: true
    # add_index :hosts, :unlock_token,         unique: true
  end
end

migrate:create_tours.rb

class CreateTours < ActiveRecord::Migration
  def change
    create_table :tours do |t|
      t.string :title
      t.text :text
      t.references :host, index: true

      t.timestamps null: false
    end

    add_foreign_key :tours, :hosts
    add_index :tours, [:host_id, :created_at]
  end
end

所以它的基础是我想将游览添加到主机并更新布局html。

主机 - show.html.erb - 这需要为相关的游览添加一些行。 所以在hosts / 1下我需要基础知识来显示标题和文本字段的巡视输出。

<div class="row">
    <div class="col-md-3">
        <div class="center">

    </div>
    <div class="panel panel-default">
        <div class="panel-heading">Verification</div>
        <div class="panel-body">
            Email Address<br>
            Phone Number here andmpre
            </div>
        </div>
    </div>

    <div class="col-md-9">
        <h2><%= @host.email  %></h2>

    </div>
</div>

Tours - index.html.erb - 喜欢添加代码行来显示主机ID

<h1>Index TOURS</h1>

<%= link_to 'New Tour', new_tour_path %>

<table>
  <tr>
    <th>Title</th>
    <th>Text</th>
  </tr>

  <% @tours.each do |tour| %>
    <tr>
      <td><%= tour.title %></td>
      <td><%= tour.text %></td>
      <td><%= link_to 'Show', tour_path(tour) %></td>
      <td><%= link_to 'Edit', edit_tour_path(tour) %></td>
      <td><%= link_to 'Destroy', tour_path(tour),
              method: :delete,
              data: { confirm: 'Are you sure?' } %></td>
    </tr>
  <% end %>
</table>

希望有一个人可以帮助我的快捷方式。 尝试过教程,但由于我是ROR的新手,有时他们会在我试图保持简单时感到困惑。

0 个答案:

没有答案