Ссылка не «публиковать» правильные данные к действию. (только получить последний идентификатор) - PullRequest
1 голос
/ 08 апреля 2020

У меня есть страница, на которой перечислены все новостные статьи и кнопка редактирования рядом с ними (управлять). Кнопка редактирования позволяет перейти на страницу редактирования и отправить данные соответствующей статьи. Кнопка редактирования всегда выбирает последний сгенерированный идентификатор. Что я делаю не так с моим l oop?


Ресурсами:

rout.rb

  get   '/news/manage', to: 'news#manage'
  match '/news/edit', to: 'news#edit', :via => :post

news_controller.rb

before_action do
  setup(session[:current_user_id])
end

def edit
  @article = News.find(params[:id])
end

def manage
end

private
  def setup(session)
    @user = User.find(session)
    @articles = News.all
  end

управление. html .erb

<%= form_tag '/news/edit', method: "post" do %>
  <%= @articles.each do |article| %>
        <%= content_tag :button, type: "submit" do %>
          <%= content_tag :i do %><%end%>
        <%end%>
      <%= content_tag :input, name: "id", value: article.id do %> <%end%>
  <%end%>
<%end>

edit. html .erb

<%= content_tag :textarea, name: "content", rows: "20" do %>
    <%= @article.content.gsub(/\s+/, " ")%>
<%end%>
<%= content_tag :input, name: "id", type: "hidden", value: @article.id do %> <%end%>

Ответы [ 2 ]

2 голосов
/ 09 апреля 2020

Сначала внесите следующие изменения в routes.rb

, замените

match '/news/edit', to: 'news#edit', :via => :post

на

get '/news/:id/edit' => 'news#edit', as: :edit_news

, затем замените

<%= form_tag '/news/edit', method: "post" do %>
  <%= @articles.each do |article| %>
        <%= content_tag :button, type: "submit" do %>
          <%= content_tag :i do %><%end%>
        <%end%>
      <%= content_tag :input, name: "id", value: article.id do %> <%end%>
  <% end %>
<% end %>

на

<%= @articles.each do |article| %>
  <%= link_to "Edit", edit_news(article) %>
<% end %>

this will create `Edit` link for each article and clicking on it will take you to edit page.

Если вы хотите показать ссылку в виде кнопки, вам нужно написать css.

1 голос
/ 08 апреля 2020

Проблема в том, что ваша форма имеет несколько сгенерированных элементов с одинаковым именем: "id". Он не знает, какой использовать, поэтому он использует последний.

Теперь мысль .... как сделать имя уникальным для каждой статьи? Возможно, это не лучшее решение, но ... не

Сделайте вашу форму уникальной. Измените этот код:

<%= form_tag '/news/edit', method: "post" do %>
  <%= @articles.each do |article| %>
        <%= content_tag :button, type: "submit" do %>
          <%= content_tag :i do %><%end%>
        <%end%>
      <%= content_tag :input, name: "id", value: article.id do %> <%end%>
  <%end%>
<%end>

на этот:

<%= @articles.each do |article| %>
  <%= form_tag '/news/edit', method: "post" do %>
        <%= content_tag :button, type: "submit" do %>
          <%= content_tag :i do %><%end%>
        <%end%>
      <%= content_tag :input, name: "id", value: article.id do %> <%end%>
  <%end%>
<%end>
...