has_many: из-за проблемы с ассоциацией в rails5

#ruby-on-rails #ruby-on-rails-5

#ruby-on-rails #ruby-on-rails-5

Вопрос:

user has_many project и project имеет много user .

project_user таблица имеет атрибут project_id и user_id .

использование devise gem для пользователей.

когда пользователь создает новый проект, проект создается пользователями. но проект не виден пользователю в index.html.erb поле зрения.

вот мой код: project.rb

   has_many :project_users
  has_many :users, through: :project_users
  

project_user.rb

 class ProjectUser < ApplicationRecord
  belongs_to :user
  belongs_to :project
end
  

user.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#проект

 <% @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 %>
  

Комментарии:

1. В чем вопрос?

2. @jvillian, я не могу видеть projects созданное текущим пользователем в их представлении.

3. @jvillian, текущий пользователь, создающий проект, не может видеть свой проект в моей текущей has_many has_many ассоциации. как я вижу, мои проекты создаются, но отображение в project_user таблице не обновляется.

Ответ №1:

Вам необходимо добавить созданный проект к проектам пользователя. Я думаю, вы можете сделать следующее:

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

Комментарии:

1. получение ошибки undefined method `user_projects' for #<User:0x00007f8c609c0b50>

2. Я обновил ответ, он current_user.project_users.....

3. @rock: — Вам не нужна user_id таблица проектов, так как у вас отношения «Многие ко многим», а не отношения «Один ко многим».