Как можно отобразить частичную форму в действии index, чтобы обновить логические значения для записей? Рельсы 5 - PullRequest
0 голосов
/ 08 января 2019

Я пытаюсь визуализировать частичную форму внутри каждого блока do, чтобы обновить его логические значения и значения enum. Я не могу передать идентификатор записи самой форме. Не удается распознать объект формы.

Я использую Rails 5.2 и последнюю версию Simple_Form. Я выполнил партиал в выпадающем меню bs 4, в котором были бы доступны только логические атрибуты и атрибуты перечислителя для объекта.

index.html.erb

<% @posts.each.with_index(1) do |post, index| %>
  <div class="card bg-light mb-3 posts-card-border-reset" style="max-width: 20rem;">
  <div class="card-header post-card-header"><span class="badge badge-purple">App</span> #<%= index %>
  <div class="dropdown dropleft" style="float: right;">
    <button class="bttn-material-circle bttn-sm bttn-default" id="dropdown_post_1" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false">
      <i class="fas fa-align-justify caret-color"></i>
    </button>
    <div class="dropdown-menu post-sub-menu-dropdown" aria-labelledby="dropdown_post_1">
          <%= render 'applicant_status_update_form', local: post %>
      </div>
    </div>
  </div>
</div>
<div class="card-body">
  <h5 class="card-title">
    <i class="fas fa-user-tie"></i> <%= post.user_first_name + " " + post.user_last_name %>
  </h5>
  <p class="card-text"><i class="fas fa-at"></i> <%= post.user.email %></p>
  </p>

  <div class="post-card-divider"></div>
  <small class="text-muted">
    <i class="far fa-clock"></i> <%= post.created_at.strftime('%l:%M %p %m/%d/%Y') %></small>
  </div>
</div>
<% end %>

форма

<%= simple_form_for(@post, :url => admin_applicant_update_application_status_path, :method => :post) do |f| %>
 <div class="dropdown-item">
<span class="dropdown-header"><%= f.input :is_post_reviewed, as: :boolean, boolean_style: :inline %> <small>Mark As Reviewed</small></span>
  </div>
  <div class="dropdown-divider"></div>
  <div class="dropdown-item">
    <ul class="list-group">
       <li><p class="font-weight-bold">Application Status</p></li>
    </ul>
    </div>
  <div class="dropdown-item">
    <span><%= f.input :status, as: :radio_buttons %></span>
  </div>
  <div class="dropdown-item">
    <%= f.button :submit, "Update Status", class: 'bttn-simple bttn-md bttn-royal' %>
  </div>
<% end %>

post_application.rb

class PostApplication < ApplicationRecord
  include Friendlyable
  belongs_to :user

  enum status: { pending: 'pending', accepted: 'accepted', denied: 'denied' }, _prefix: :status
end

admin_applicants_controller

class AdminApplicantsController < ApplicationController
  before_action :authenticate_admin!

  def index
@posts = Kaminari.paginate_array(current_admin.posts.collect(&:post_applications).flatten).page(params[:page]).per(15)
  end

  def update_application_status
    @post = PostApplication.find(params[:id])
permitted_columns = params.require(:post).permit(:is_application_reviewed, :status)
    if @post.update_attributes(permitted_columns)
      flash[:success] = "#{@post.first_name}'s Application Status Updated!"
      redirect_to admin_applicants_path
    else
      flash[:danger] = "#{@post.first_name}'s failed to update! Try again"
      redirect_to admin_applicants_path
    end
  end
end

1017 * маршруты *

  resources :admin_applicants, :only => [:index] do
    post :update_application_status
  end

Логические / enum-атрибуты должны быть изменяемыми, а форма должна публиковаться с примененными обновлениями.

1 Ответ

0 голосов
/ 08 января 2019

Вы можете передать переменную непосредственно в render, согласно здесь . В вашем случае:

<%= render 'applicant_status_update_form', post: post %>

Доступны также :

<%= render 'applicant_status_update_form', object: post, as: 'post' %>
<%= render 'applicant_status_update_form', locals: { post: post } %>

Все приводит к одному и тому же: создание локальной переменной post доступной для вашей части.

Оттуда вам нужно будет переключить @post на post в вашей части, и все должно отображаться как нужно.

Надеюсь, это поможет - дайте мне знать, как вы поживаете.


Обновление на основе вашего комментария

Если вы не нашли сообщение по идентификатору в вашем действии обновления, я думаю, что я видел проблему: вы передаете URL admin_applicant_update_application_status_path в форму без идентификатора.

Для быстрого исправления вы можете использовать:

<%= simple_form_for(post, :url => admin_applicant_update_application_status_path(id: post.id), :method => :post) do |f| %>

Лучше будет обновить ваши маршруты, чтобы получить идентификатор в пути update_application_status. Итак, переключите ваш routes.rb на использование:

resources :admin_applicants, :only => [:index] do
  post 'update_application_status/:id'
end

А затем ваша форма:

<%= simple_form_for(post, :url => admin_applicant_update_application_status_path(post.id), :method => :post) do |f| %>

Этот раздел документации охватывает вышеперечисленное, если вы заинтересованы в чтении.

Надеюсь, что это делает для тебя!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...