rails - form_for - как сделать, чтобы моя форма «Свойство» обновляла модель «Билет»?

У меня есть 3 таблицы: OwnerofProperty, Property и Ticket. Я хочу создать форму, используя form_for для представления бронирования недвижимости; Могу ли я создать форму для получения данных из Property, где кнопка отправки сохраняет данные в таблице Ticket? Я спрашиваю, потому что понятия не имею, возможно ли это или как это сделать.

Примечание. Я создал только отношения: OwnerofProperty один ко многим Property

Property один на один Ticket

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

Schema.rb для трех моделей:

create_table "owners", :force => true do |t|
    t.string   "f_name"
    t.string   "l_name"
    t.string   "address"
    t.string   "tel_no"
    t.datetime "created_at", :null => false
    t.datetime "updated_at", :null => false
  end

  create_table "properties", :force => true do |t|
    t.string   "p_street"
    t.string   "p_city"
    t.string   "postcode"
    t.string   "property_type"
    t.integer  "rooms"
    t.integer  "rent"
    t.integer  "owner_id"
    t.datetime "created_at",    :null => false
    t.datetime "updated_at",    :null => false
  end

  add_index "properties", ["owner_id"], :name => "index_properties_on_owner_id"

  create_table "tickets", :force => true do |t|
    t.string   "city"
    t.string   "street"
    t.string   "ticket_type"
    t.integer  "rooms"
    t.integer  "rent"
    t.integer  "property_id"
    t.datetime "created_at",  :null => false
    t.datetime "updated_at",  :null => false
  end

  add_index "tickets", ["property_id"], :name => "index_tickets_on_property_id"

person Mostafa Hussein    schedule 03.05.2013    source источник
comment
Можете ли вы поделиться кодом того, что вы пробовали до сих пор?   -  person Alex Lynham    schedule 03.05.2013
comment
Я сделал только отношения и до сих пор не делал никакого кода в контроллере или представлении, потому что я не знаю, что я хочу сделать, возможно или нет, все, что я могу сделать, это форма регистрации :(   -  person Mostafa Hussein    schedule 03.05.2013
comment
Вы можете указать, какой контроллер и действие вы отправляете данные — просто укажите их в файле form_for. api.rubyonrails.org/classes/ActionView/Helpers/FormHelper.html   -  person Alex Lynham    schedule 03.05.2013
comment
лучшее название вопроса поможет.   -  person Michael Durrant    schedule 03.05.2013


Ответы (1)


Да, это возможно.

посмотрим ticket_controller.rb

def new
  @property = Property.find 20  #20 is property id
  @properties = Property.all
  #@ticket = Ticket.new
end

теперь в view (где вы хотите создать форму):

<%= form_for @ticket do |f| %>
<%= f.select :property_id, @properties.collect {|p| [ p.name, p.id ] }%> <!-- just an example, Ticket model has a field named "property_id" -->
<%= f.submit %>
<%= end %>

эта форма подчиняется create действию ticket_controller. И вы можете получить все данные как params и сохранить их в таблицу.

def create
@ticket = Ticket.new(params[:ticket])
@ticket.save
  respond_to do |format|
    format.html{redirect_to( your_desired_path)}
  end
end
person rony36    schedule 03.05.2013
comment
Разве это не должно быть form_for @ticket do |f| вместо [@property, @ticket] и Property.all.collect вместо @properties? где вы устанавливаете @properties? - person Matthias; 03.05.2013
comment
хм, если отношение «один к одному» «Свойство» и «Билет», ваше поле выбора не имеет смысла, я думаю. вам следует исключить все свойства, которые уже назначены заявке. Но это определенно хороший пример, чтобы получить основную идею. - person Matthias; 03.05.2013
comment
вы должны вкладывать свои маршруты следующим образом: :resources :properties do :resources :tickets end - person Matthias; 03.05.2013
comment
неопределенный метод для сбора и, пожалуйста, скажите мне, как должен выглядеть метод создания - person Mostafa Hussein; 03.05.2013
comment
#новый неопределенный метод имя_модели в этой строке ‹%= f.select :property_id, @properties.collect {|p| [ p.name, p.id ] }%› - person Mostafa Hussein; 03.05.2013
comment
есть ли поле property_id в модели Ticket? - person rony36; 03.05.2013
comment
да есть, но в модели Тикетов нет данных, т.к. ее надо заполнять через форму - person Mostafa Hussein; 03.05.2013
comment
пожалуйста, убедитесь, что ваша модель Property имеет поле name. Если по-прежнему возникает ошибка, укажите схему ваших 3 моделей. - person rony36; 03.05.2013
comment
вопрос обновлен, может быть, отношение должно быть в билете has_on property и property own_to ticket ??? - person Mostafa Hussein; 03.05.2013
comment
о, я понял это. В вашей модели Property нет поля name, но вы тянете здесь @properties.collect {|p| [ p.name, p.id ]. Итак, что-то вроде: <%= f.select :property_id, @properties.collect {|p| [ p.property_type, p.id ] }%>. - person rony36; 03.05.2013