collection_select не передает значение value_id в базу данных - PullRequest
0 голосов
/ 08 октября 2011
<%= collection_select(:category, :category_id, Category.all, :id, :category_name ,:prompt=>"category") %>

не будет вставлять category_id в таблицу сделок. Даже если в параметрах вы можете увидеть, что category_id есть, но он не передается в таблицу базы данных сделок. Вот остальная часть кода. Любая помощь будет принята. Спасибо

   <%= form_for @deal ,:url=>{:action =>"create"} do |c|%>

    <%= c.text_field :item_name %><br/>
    <%=c.fields_for :stores do |s| %>
    <%=s.text_field :store_name %>
   <%end%>
   <%=c.fields_for :category  do |d| %>
   <%= collection_select(:category, :category_id, Category.all, :id, :category_name ,:prompt=>"category") %>

  <%end%>
  <%= c.submit "post"%>

   <%end%>

Модель

    class Deal < ActiveRecord::Base
belongs_to :category
    accepts_nested_attributes_for :category 
    end

    class Category < ActiveRecord::Base
has_many :deals
    end

В журнале

    Parameters: {"utf8"=>"✓",    "authenticity_token"=>"oO5AtFX4HUYAhcP15y/dFzn3kjVDmweykQPqgDDuupQ=", "deal"=> {"item_name"=>"grapes", "stores_attributes"=>{"0"=>{"store_name"=>"winco"}}},  "category_id"=>"2", "commit"=>"post"}
    City Load (0.1ms)  SELECT "cities".* FROM "cities" WHERE "cities"."id" = ? LIMIT  1  [["id", 2]]
    SQL (1.5ms)  INSERT INTO "deals" ("brand", "category_id", "city_id",  "created_at", "item_name", "price", "size", "stars", "updated_at") VALUES (?, ?, ?, ?, ?,  ?, ?, ?, ?)  [["brand", nil], ["category_id", nil], ["city_id", 2], ["created_at", Fri, 07  Oct 2011 23:16:45 UTC +00:00], ["item_name", "grapes"], ["price", nil], ["size", nil],  ["stars", nil], ["updated_at", Fri, 07 Oct 2011 23:16:45 UTC +00:00]]
     SQL (0.5ms)  INSERT INTO "stores" ("address", "created_at", "store_name",  "updated_at") VALUES (?, ?, ?, ?)  [["address", nil], ["created_at", Fri, 07 Oct 2011  23:16:45 UTC +00:00], ["store_name", "winco"], ["updated_at", Fri, 07 Oct 2011 23:16:45 UTC +00:00]]
    SQL (0.9ms)  INSERT INTO "store_deals" ("address", "created_at", "deal_id",  "store_id", "store_name", "updated_at") VALUES (?, ?, ?, ?, ?, ?)  [["address", nil],   ["created_at", Fri, 07 Oct 2011 23:16:45 UTC +00:00], ["deal_id", 4], ["store_id", 4], ["store_name", nil], ["updated_at", Fri, 07 Oct 2011 23:16:45 UTC +00:00]]

Ответы [ 3 ]

2 голосов
/ 08 октября 2011

Попробуйте использовать:

<%= c.collection_select(:category_id, Category.all, :id, :name ,:prompt=>"category")%>
or
<%= c.collection_select(:Category_id, Category.all, :id, :name ,:prompt=>"category")%>
or
<%= c.select :category_id, Category.all.collect { |v| [ v.name, v.id ] } %>

без

        <%=c.fields_for :category  do |d| %>

Поскольку сделка относится к категории, у вас будет поле category_id или Category_id в модели сделки, которая вам не нужна

accepts_nested_attributes_for :category 

, если вы не пытаетесь создать новую категорию одновременно со сделкой.

1 голос
/ 08 октября 2011

Посмотрите на параметры. category_id находится вне хэша сделки (тогда как item_name и stores_attributes находятся внутри).

Вы, вероятно, хотите <%= c.collection_select ... %>

Избавьтесь от полей_ для выбора категории - для этого нет причин. category_id - это атрибут сделок, а не категория.

0 голосов
/ 09 октября 2011

Наконец этот сработал

<%= c.collection_select( :category_id, Category.all ,:id,:category_name,:prompt=>"category") %>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...