Невозможно установить данные формы в базу данных, используя рельсы - PullRequest
0 голосов
/ 06 января 2020

У меня есть модель project_site, где пользователь загружает файл имени в базу данных. и другой моделью является project_manager, который принимает и отклоняет логическое поле и поле примечания вместе с каждой записью project_site. но я не могу установить логические данные замечаний и статус в базу данных project_manager. Вот мой код:

project_manager.rb

class ProjectManager < ApplicationRecord
  belongs_to :project_site
end

project_site.rb

class ProjectSite < ApplicationRecord
  has_many :project_managers, dependent: :destroy
  validates :name,:attendance, presence: true
end

project_manager_dashboard

  <table>
    <thead>
      <tr>
        <th>Uploaded By</th>
        <th>Attendance File</th>
        <th colspan="2"></th>
      </tr>
    </thead>

    <tbody>
      <% @project_sites.each do |project_site| %>
        <tr>
            <td><%= project_site.name.titleize %></td>
            <% if project_site.attendance? %>
              <td><%= link_to "View Attendance", project_site.attendance.url, :class => "fi-page-export-csv" %></td>
            <% else %>
              <td>No File Present</td>
            <% end %>

            <td>
              <%= form_for [ @project_site, @project_manager ] do |f| %>
                <div class="row">
                  <div class="medium-6 columns">
                    <%= f.radio_button :status, true  %>
                    <%= f.label :approve %>
                    <%= f.radio_button :status, false  %>
                    <%= f.label :reject %>
                  </div>
                  <br>
                  <br>
                  <div class="medium-6 cloumns">
                    <%= f.label :remark %><br/>
                    <%= f.text_area :remark %>
                  </div>

                    </div>
                  <div>
                    <%= f.submit 'Submit', :class => 'button primary' %>
                  </div>

              <% end %>
            </td>
            <td><%= link_to 'Action', project_site, :class=>'button tiny primary' %></td>
        </tr>
      <% end %>
    </tbody>
  </table>

project_manager_controller.rb

class ProjectManagersController < ApplicationController

  def index
   @project_sites = ProjectSite.all.order("created_at DESC").paginate(page: params[:page], per_page: 10)
   @project_manager = ProjectManager.new
   #@project_manager.project_site_id = @project_site.id
  end


  def create
     @project_manager = ProjectManager.new(remark_params)
    @project_manager.project_site_id = params[:project_site_id]
    @project_manager.save

    redirect_to project_managers_path
  end

  def remark_params
    params.require(:project_manager).permit(:remark, :status)
  end
end

rout.rb

  resources :project_sites
  resources :project_managers

Ответы [ 2 ]

0 голосов
/ 06 января 2020

Форма, которую вы создали, правильная, вам нужна вложенная форма, потому что вы создаете менеджеров проектов для сайтов проектов. Однако, если ваша форма является вложенной, вам также нужны вложенные маршруты. Для создания новой записи это должно выглядеть следующим образом:

routes.rb

resources :project_sites do
  resources :project_managers, only: [:create]
end

(это называется мелким вложением, вы вкладываете только при создании новой записи). Таким образом, вам не нужно передавать идентификатор сайта проекта в скрытом поле, оно будет частью URL.

Теперь это должно направить HTTP-запрос, который отправляется, когда вы нажимаете «отправить» на Форма для вашего ProjectManagersController. Код там выглядит нормально. Если запись все еще не создана, проверьте журналы в вашем терминале, где вы запускаете rails server. Вы видите, куда приходит запрос POST? Go через все строки и посмотрите, имеют ли они смысл. У меня такое ощущение, что сайт проекта не назначается руководителю проекта, и поэтому запись не может быть сохранена. Потому что belongs_to :project_site в project_manager.rb содержит проверку. Есть ли откат вместо сохранения менеджера предпроектов?

0 голосов
/ 06 января 2020

Сторона контроллера

   class ProjectManagersController < ApplicationController

      def index
       @project_sites = ProjectSite.all.order("created_at DESC").paginate(page: params[:page], per_page: 10)
       @project_manager = ProjectManager.new
      end


      def create
        @project_manager = ProjectManager.new(remark_params)
        @project_manager.save

        redirect_to project_managers_path
      end

      def remark_params
        params.require(:project_manager).permit(:remark, :status, :project_site_id)
      end
    end

Вид сбоку

<tbody>
  <% @project_sites.each do |project_site| %>
    <tr>
        <td><%= project_site.name.titleize %></td>
        <% if project_site.attendance? %>
          <td><%= link_to "View Attendance", project_site.attendance.url, :class => "fi-page-export-csv" %></td>
        <% else %>
          <td>No File Present</td>
        <% end %>

        <td>
          <%= form_for @project_manager do |f| %>
            <div class="row">
              <div class="medium-6 columns">
                <%= f.radio_button :status, true  %>
                <%= f.label :approve %>
                <%= f.radio_button :status, false  %>
                <%= f.label :reject %>
              </div>
              <br>
              <br>
              <div class="medium-6 cloumns">
                <%= f.label :remark %><br/>
                <%= f.text_area :remark %>
              </div>
                <%=f.hidden_field :project_site_id, value: project_site.id%>
                </div>
              <div>
                <%= f.submit 'Submit', :class => 'button primary' %>
              </div>

          <% end %>
        </td>
        <td><%= link_to 'Action', project_site, :class=>'button tiny primary' %></td>
    </tr>
  <% end %>
</tbody>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...