gpt4 book ai didi

ruby-on-rails - 如何在两个 Rails 模型之间创建关联

转载 作者:太空宇宙 更新时间:2023-11-03 17:37:46 24 4
gpt4 key购买 nike

这是一个新手问题,但我仍在学习如何在 Rails 中的两个模型之间创建关联。我有一个用户模型和一个 journal_entry 模型。日记条目属于用户,用户有_许多日记条目。我创建了如下所示的迁移:

class AddJournalEntriesToUsers < ActiveRecord::Migration
def change
add_column :journal_entries, :user_id, :integer
end
end

class AddIndexToJournalEntries < ActiveRecord::Migration
def change
add_index :journal_entries, [:user_id, :created_at]
end
end

这是我的用户模型的样子:

class User < ActiveRecord::Base
authenticates_with_sorcery!

attr_accessible :email, :password, :password_confirmation

has_many :journal_entries, dependent: :destroy

validates_confirmation_of :password, :message => "should match confirmation", :if => :password
validates_length_of :password, :minimum => 3, :message => "password must be at least 3 characters long", :if => :password
validates_presence_of :password, :on => :create
validates_presence_of :email
validates_uniqueness_of :email

end

这是我的 journal_entry 模型的样子:

class JournalEntry < ActiveRecord::Base
attr_accessible :post, :title, :user_id

belongs_to :user

validates :user_id, presence: true

default_scope order: 'journal_entries.created_at DESC'
end

但是当我去 /journal_entries/new 创建一个新的日记条目时,我只是一个验证错误,说“用户不能为空”。所以 user_id 没有被添加到日志条目中,即使我已经登录并且在我的 db/schema.rb 中有一个 user_id 列:

create_table "journal_entries", :force => true do |t|
t.string "title"
t.text "post"
t.datetime "created_at", :null => false
t.datetime "updated_at", :null => false
t.integer "user_id"
end

此外,这是我在 journal_entries/new 上用来创建日记条目的表单:

<%= form_for(@journal_entry) do |f| %>
<% if @journal_entry.errors.any? %>
<div id="error_explanation">
<h2><%= pluralize(@journal_entry.errors.count, "error") %> prohibited this journal_entry from being saved:</h2>

<ul>
<% @journal_entry.errors.full_messages.each do |msg| %>
<li><%= msg %></li>
<% end %>
</ul>
</div>
<% end %>

<div class="field">
<%= f.label :title %><br />
<%= f.text_field :title %>
</div>
<div class="field">
<%= f.label :post %><br />
<%= f.text_area :post %>
</div>
<div class="actions">
<%= f.submit %>
</div>
<% end %>

我在这里错过了什么?我是否需要将 user_id 添加为表单上的隐藏字段?

最佳答案

我敢打赌,你会忘记类似的东西

def create
@journal_entry = @user.journal_entries.build(params[:journal_entry])
# @journal_entry = current_user.journal_entries.build(params[:journal_entry])
if @journal_entry.save
..

关于ruby-on-rails - 如何在两个 Rails 模型之间创建关联,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11354724/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com