вставка записи has_many - PullRequest
       29

вставка записи has_many

1 голос
/ 20 марта 2012

Я хочу вставить теги в новое место. Присвоение тегов происходит в другой модели.

####### models ##########
class Tag < ActiveRecord::Base
  belongs_to :place
  attr_accessible :tag
end

class Place < ActiveRecord::Base
  has_many :tags
end

как я могу справиться с этим в новой форме Place create? а действие создания в местах_контроллера? чтобы я мог вставить новые теги места и mant, а затем назначить идентификатор продукта каждому тегу.

####### place controller ##########

def create
  @place = Place.new(params[:place])
  @tag = Tag.new(params[:?????]) #this should be more than once

  respond_to do |format|
    if @place.save
      format.html { redirect_to @place, notice: 'Place was successfully created.' }
      format.json { render json: @place, status: :created, location: @place }
    else
      format.html { render action: "new" }
      format.json { render json: @place.errors, status: :unprocessable_entity }
    end
  end
end

####### place new form ##########
<%= form_for @place do |f| %>     
  <div class="field">
    <%= f.label :title %><br />
    <%= f.text_field :title %>
  </div>
  <div class="field">
    <%= f.label :description %><br />
    <%= f.text_area :description %>
  </div>
  <div class="field">
    <%= f.label :rank %><br />
    <%= f.text_field :rank %>
  </div>
  <div class="field">
    <%= f.label :lat %><br />
    <%= f.text_field :lat %>
  </div><div class="field">
    <%= f.label :lng %><br />
    <%= f.text_field :lng %>
  </div>
  <div class="field">
    <%= f.label :address %><br />
    <%= f.text_area :address %>
  </div>
  <div class="field">
    <%= f.label :website %><br />
    <%= f.text_field :website %>
  </div>
  <div class="field">
    <%= f.label :phone %><br />
    <%= f.text_field :phone %>
  </div>
  <div class="field">
    <%= label_tag "tags" %>
    <%= f.text_field :tag %>
  </div>
  <div class="actions">
    <%= f.submit %>
  </div>
<% end %>

Ответы [ 2 ]

1 голос
/ 20 марта 2012
  1. Если вы хотите сделать это самостоятельно, вам следует заглянуть в accepts_nested_attributes_for, где Райан Бейтс (Ryan Bates) предлагает великолепный учебник из 2 частей по адресу railscasts.com

  2. Если вы не хотите делать это самостоятельно, есть несколько доступных тегов, например: ActsAsTaggableOn .

0 голосов
/ 20 марта 2012

Добавьте это в вашей форме:

<%= f.fields_for :tags do |t| %>
    <%= t.label :name %>
    <%= t.text_field :name %>
<% end %>

И в вашей Place модели:

accepts_nested_attributes_for :tags

И в вашем контроллере вам даже не придется беспокоиться о созданиитеги.

Вы все равно должны попытаться прочитать о fields_for и accepts_nested_attributes_for, они часто полезны, поскольку ваша проблема очень распространена.

...