【问题标题】:has_many :through association issue in rails5has_many :通过rails5中的关联问题
【发布时间】:2020-09-24 13:00:52
【问题描述】:

user has_many projectproject 有很多 user

project_user 表具有属性project_iduser_id

为用户使用设计 gem。

当用户创建新项目时,项目将由用户创建。但用户在index.html.erb 视图中看不到项目。

这是我的代码: 项目.rb

  has_many :project_users
  has_many :users, through: :project_users

project_user.rb

class ProjectUser < ApplicationRecord
  belongs_to :user
  belongs_to :project
end

用户.rb

  has_many :project_users
  has_many :projects, through: :project_users

projects_controller.rb

  def index
    @projects = current_user.projects.all.order("created_at DESC")
  end

  def create
    @project = current_user.projects.build(project_params)

    respond_to do |format|
      if @project.save

        format.html { redirect_to projects_url, notice: 'Project was successfully created.' }
        format.json { render :show, status: :created, location: @project }
      else
        format.html { render :new }
        format.json { render json: @project.errors, status: :unprocessable_entity }
      end
    end
  end
      params.require(:project).permit(:project_name, :from_date, :to_date)

index.html.erb#project

<% @projects.each do |project| %>
<% end %>

form.html.erb(项目)

<%= form_with(model: project, :html => {:id => 'project-form-validation'}, local: true) do |form| %>

<div class="row select-date-wrapper">
  <div class="field columns large-6">
    <%= form.label :project_name,:class=>"required" %>
    <%= form.text_field :project_name %>
  </div>

  <div class="field columns large-2">
    <%= form.label :from_date,:class=>"required" %>
    <%= form.text_field :from_date, class: 'datepicker', readonly: 'true' %>
  </div>

  <div class="field columns large-1"></div>

  <div class="field columns large-2">
    <%= form.label :to_date,:class=>"required" %>
    <%= form.text_field :to_date, class: 'datepicker', readonly: 'true' %>
  </div>

  <div class="field columns large-1"></div>
</div>

<div class="row">
  <div class="actions columns button-right">
    <br>
    <%= form.submit :class => "button primary" %>
  </div>
</div>
<% end %>

【问题讨论】:

  • 问题是什么?
  • @jvillian,我无法在他们的视图中看到当前用户创建的projects
  • @jvillian,创建项目的当前用户无法在我当前的 has_manyhas_many 关联中看到他们的项目。正如我所见,我创建了项目,但 project_user 表中的映射没有得到更新。

标签: ruby-on-rails ruby-on-rails-5


【解决方案1】:

您需要将创建的项目附加到用户的项目中。我认为您可以执行以下操作:

if @project.save
  current_user.project_users.create(project: @project)
  # rest of the code
end

【讨论】:

  • 出现错误undefined method `user_projects' for #&lt;User:0x00007f8c609c0b50&gt;
  • 我更新了答案,是current_user.project_users.....
  • @rock :- 你不需要在项目表中使用user_id,因为你有多对多关系而不是一对多关系。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-12-28
  • 2010-09-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多