Ввод формы для обновления строки, но я не могу найти идентификатор. Где это находится? - PullRequest
0 голосов
/ 17 июня 2010

Как мне передать идентификатор?

Ошибка:

Не удалось найти продукт без идентификатора

Форма:

<% form_for :product, @product, :url => { :action => :update } do |f| %>
  <%= f.error_messages %>

  <p>
    <%= f.label :names %><br />
    <%= f.text_field :names %>
  </p>
  <p>
    <%= f.submit 'Update' %>
  </p>
<% end %>

Контроллер (для / products / edit / 1 view):

def edit
  @product = Product.find(params[:id])
end

Контроллер (для изменения БД):

def update
    @product = Product.find(params[:id])

    respond_to do |format|
      if @product.update_attributes(params[:product])
        format.html { redirect_to(@product, :notice => 'Product was successfully updated.') }
        format.xml  { head :ok }
      else
        format.html { render :action => "edit" }
        format.xml  { render :xml => @product.errors, :status => :unprocessable_entity }
      end
    end
  end

Ответы [ 2 ]

2 голосов
/ 17 июня 2010

Этот тег формы должен быть достаточным:

<% form_for @product do |f| %>

Убедитесь, что у вас есть эта строка в вашем config / rout.rb:

map.resources :products

Для дополнительного кредита вы можете упростить загрузку @product в свой контроллер с помощью before_filter:

class ProductsController < ApplicationController
  before_filter :load_product, :only => [:show, :edit, :update, :destroy]
  def load_product
    @product = Product.find(params[:id])
  end
end
2 голосов
/ 17 июня 2010

Попробуйте удалить: product из оператора form_for

Редактировать: Попробуйте также удалить параметр url.Проблема заключается в том, что URL, по которому вы публикуете сообщение, не имеет атрибута id.

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