【问题标题】:Validation failed: Park must exist, User must exist验证失败:公园必须存在,用户必须存在
【发布时间】:2020-07-30 19:27:38
【问题描述】:

我正在开发一个项目,用户可以看到狗公园并为每个公园制作单独的Playdates。我遇到的问题是 PlaydatesController 创建操作没有保留每个新播放日期关联的 user_id 和 park_id 。我尝试将 optional: true 添加到我的 Playdate 模型中,它确实保存了每个 playdate。但是,这样做会为 user_id 和 park_id 生成一个 null 列条目。

我只需要 user_id 和 park_id 来创建一个游戏日期并保持游戏日期和公园之间的关联......我是否搞砸了我的关联?非常感谢任何帮助。

这是我的代码:

播放日期模型:

class Playdate < ApplicationRecord
  belongs_to :park
  belongs_to :user

  validates :date, presence: true 
  validates :time, presence: true
end

公园模型:

class Park < ApplicationRecord
  has_many :playdates
  has_many :comments
  has_many :users, through: :comments 
end

用户模型:

class User < ApplicationRecord
  has_many :parks
  has_many :playdates 
  has_many :comments, through: :parks
end

播放日期控制器:

def create
    @playdate = Playdate.new(playdate_params)
    if @playdate.save!
        redirect_to park_path(@park)
    else
        render :new
    end
end

private

def playdate_params
    params.require(:playdate).permit(:time, :date, :user_id, :park_id)
end

播放日期新视图:

<%= form_for @playdate do |f| %>
  <%= f.label :date %>
  <%= f.date_field :date %><br><br>
  <%= f.label :time %>
  <%= f.time_field :time %><br><br>
  <%= hidden_field_tag :user_id, current_user.id %>
  <%= hidden_field_tag :park_id, @park%>
  <%= f.submit "Add Playdate!" %>
<% end %>

【问题讨论】:

    标签: ruby-on-rails ruby activerecord


    【解决方案1】:

    你应该使用:

    f.hidden_field :user_id, value: current_user.id
    f.hidden_field :park_id, value: @park.id
    

    “hidden_​​field_tag”和“hidden_​​field”渲染的 HTML 不同。自己尝试看看有什么不同。

    【讨论】:

    • 谢谢!!!!哇,看的我都觉得傻了。哈哈,非常感谢!!!!
    • 我昨天在这上面花了几个小时!!!!
    • 我们都经历过这个^^'
    • 我还在学习,这是肯定的。我经常意识到我犯的错误非常简单,就像这样。我需要记住首先从“简单”级别开始调试,然后再转向更高级别的调试技术(而不是另一个方向......)。再次感谢!
    猜你喜欢
    • 2016-12-23
    • 2020-07-11
    • 1970-01-01
    • 1970-01-01
    • 2021-12-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多