Как показать кнопку редактирования только для записи и сохранить данные в базу данных из формы редактирования в рельсах - PullRequest
0 голосов
/ 13 ноября 2018

Я отображаю все записи из БД в виде таблицы HTML вместе с кнопкой редактирования. При нажатии кнопки редактирования он перенаправляет на редактирование представления, в котором отображаются дополнительные столбцы.

Здесь я показывал кнопку сохранения в форме редактирования для всех строк / записей. Есть ли способ предотвратить, чтобы я мог просто показать тот, который я выбрал в форме индекса.

Кроме того, после обновления полей, как мне сохранить запись и перенаправить в представление индекса.

Ниже приведены фрагменты кода:

metrics_controller.rb:

class MetricsController < ApplicationController
  def index
    @metricAll = Metric.all
  end

  def show
    @metric = Metric.find(params[:id])
  end

  def edit
    @metric = Metric.find(params[:id])
    @metricAll = Metric.all
  end

  def create
    @metric = Metric.new(post_params)
    if(@metric.save)
      redirect_to @metric
    else
      render 'new'
    end
  end

  def update
    @metric = Metric.find(params[:id])
    if(@metric.update_attributes(post_params))
      redirect_to @metric
    else
      render 'edit'
    end
  end

  private def post_params
    params.require(:metric).permit(:Metric, :WI, :Value, :UT, :Score, :IsValid, :UserName, :Comments)
  end
end

edit.html.rb:

<%= form_for :metrics_controller, url: metric_path(@metric), method: :patch do |f| %>
  <table id="metrics">
    <thead>
    <tr id="AllMetricColumnNames">
      <th id="Metric"><div>Metric</th>
      <th id="WI">WI</th>
      <th id="Value">Value</th>
      <th id="UT">UT</th>
      <th id="Score">Score</th>
      <th id="IsValid">IsValid</th>
      <th id="UserName">UserName</th>
      <th id="Comments">Comments</th>
      <th id="EditColumn">Edit</th>
    </tr>
    </thead>
    <% @metricAll.each do |data| %>
      <tr id="AllMetricValues">
        <td id="Value"><%= data.Metric %></td>
        <td id="WI"><%= data.WI %></td>
        <td id="Value"><%= data.Value %></td>
        <td id="UT"><%= data.UT %></td>
        <td id="Score"><%= data.Score %></td>
        <td><%= f.select :IsValid, options_for_select(['True', 'False']), :include_blank => true, :class => 'chosen-select', :required => true, value: data.IsValid  %></td>
        <td id="UserName"><%= data.UserName %></td>
        <td id="Comments"><%= f.text_field :Comments, value: data.Comments %></td>
        <td id="SaveButton"><%= f.submit "Save" %></td>
    <% end %>
    </tr>
  </table>
<% end %>

Скриншот: enter image description here

1 Ответ

0 голосов
/ 13 ноября 2018

Вам нужно иметь form для каждого metric:

<table id="metrics">
  <thead>
  <tr id="AllMetricColumnNames">
    <th id="Metric"><div>Metric</th>
    <th id="WI">WI</th>
    <th id="Value">Value</th>
    <th id="UT">UT</th>
    <th id="Score">Score</th>
    <th id="IsValid">IsValid</th>
    <th id="UserName">UserName</th>
    <th id="Comments">Comments</th>
    <th id="EditColumn">Edit</th>
  </tr>
  </thead>
  <% @metricAll.each do |data| %>
    <%= form_for :metrics_controller, url: metric_path(data), method: :patch do |f| %>
      <tr id="AllMetricValues">
        <td id="Value"><%= data.Metric %></td>
        <td id="WI"><%= data.WI %></td>
        <td id="Value"><%= data.Value %></td>
        <td id="UT"><%= data.UT %></td>
        <td id="Score"><%= data.Score %></td>
        <td><%= f.select :IsValid, options_for_select(['True', 'False']), :include_blank => true, :class => 'chosen-select', :required => true, value: data.IsValid  %></td>
        <td id="UserName"><%= data.UserName %></td>
        <td id="Comments"><%= f.text_field :Comments, value: data.Comments %></td>
        <td id="SaveButton"><%= f.submit "Save" %></td>
      </tr>
    <% end %>
  <% end %>
</table>
...