首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >rails nested_attributes窗体找不到id

rails nested_attributes窗体找不到id
EN

Stack Overflow用户
提问于 2020-05-12 03:06:19
回答 1查看 84关注 0票数 0

所以我有两种模式:实习和复习。我希望《评论》是一份nested_attributs of Internship。这样我就可以创建一个带评论的实习岗位了。

我的问题是,新的实习表单中集成的审查表单,找不到实习的id。它引发了“审查实习必须存在”的错误

Internship.rb

代码语言:javascript
复制
  has_many :reviews, foreign_key: "review_internship_id"
  has_many :review_users, foreign_key: 'review_user_id', class_name:"User", through: :reviews

  accepts_nested_attributes_for :reviews, allow_destroy: true
  validates_associated :reviews

Review.rb

代码语言:javascript
复制
     belongs_to :review_user, class_name: "User"
     belongs_to :review_internship, class_name: "Internship"

Internship_controller

代码语言:javascript
复制
  def new
    @internship = Internship.new
    @internship.reviews.new
  end

def create
    @internship = Internship.new(internship_params)
    @internship.user = current_user
    @internship.reviews.first.review_user_id = current_user.id

    respond_to do |format|
      if @internship.save
        format.html { redirect_to @internship, notice: 'Expérience crée avec succès' }
        format.json { render :show, status: :created, location: @internship }
      else
        format.html { render :new }
        format.json { render json: @internship.errors, status: :unprocessable_entity }
      end
    end
  end

private

 def internship_params
      params.require(:internship).permit(:adress, :zipcode, :city, :specialty, :organization, :population, :cursus, :title, :duration, :description, :region, :remuneration, :user_id, reviews_attributes: [:title, :notation, :description, review_internship_id: params[:internship_id], review_user_id: current_user.id])
    end

实习中的新形式新

代码语言:javascript
复制
<%= form_with(model: internship, local: true) do |form| %>
....
<!--NESTED ATTRIBUTS REVIEW-->
      <%= form.fields_for :reviews do |p| %>

                  <%= p.label :titre %>
                  <%= p.text_field :title, class:"form-control" %>

                  <%= p.label :note %>
                  <%= p.number_field :notation, min: 1, max: 5, class:"form-control" %>

                  <%= p.label :description %>
                  <%= p.text_area :description, class:"form-control" %>

     <% end %>

   ...
 <% end %>

这就是我在实习生控制器中尝试过的

代码语言:javascript
复制
 @intership.reviews.review_internship_id = @internship.id

这样它就可以找到实习生的id。错误是“审查实习期必须存在”。

它对“评论用户”也是如此,这个问题是用@internship.reviews.first.review_user_id = current_user.id解决的

你知道问题出在哪里吗,我怎么才能找到实习生id呢?我也尝试过params:id

谢谢你的帮忙

EN

回答 1

Stack Overflow用户

发布于 2020-05-12 03:25:06

你在评论时并不需要user_id外键,因为它可以通过面试到达那里:

代码语言:javascript
复制
class Review
  belongs_to :internship
  has_one :user, through: :interview
end

class Internship
  belongs_to :user
  has_many :reviews
end

class User
  has_many :internships
  has_many :reviews, through: :internships
end

而且您绝对不需要手动为嵌套记录分配父ids。

代码语言:javascript
复制
class IntershipsController < ApplicationController

  def new
    @internship = Internship.new
    @internship.reviews.new
  end

  def create
    @internship = Internship.new(internship_params) do |i|
      i.user = current_user
    end

    respond_to do |format|
      if @internship.save
        format.html { redirect_to @internship, notice: 'Expérience crée avec succès' }
        format.json { render :show, status: :created, location: @internship }
      else
        format.html { render :new }
        format.json { render json: @internship.errors, status: :unprocessable_entity }
      end
    end
  end

  private

  def internship_params
    #  use some line-breaks!
    params.require(:internship)
          .permit(
            :adress, :zipcode, :city, :specialty, 
            :organization, :population, :cursus, 
            :title, :duration, :description, 
            :region, :remuneration, :user_id, 
            reviews_attributes: [
              :id, :title, :notation, :description
            ]
          )
  end
end
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/61737394

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档