У меня есть простое приложение, которое имеет модель горячей линии, которая является мангоидным документом. Создание и просмотр прекрасно работают, но редактирование, которое я не могу заставить работать для жизни.Mongoid edit form in Ruby не работает
Я надеялся, что кто-то может помочь мне определить, что я делаю неправильно.
Это моя создать форму, которая работает должным образом:
<%= form_for Hotline.new, :url => {:action => "create"} do |f| %>
<div class="row top-buffer">
<div class="form-group">
<label class="col-sm-1 rt-label" for="textinput">Address</label>
<div class="col-sm-3">
<%= f.text_field :city, class: 'form-control input-sm', placeholder: "City" %>
</div>
<label class="col-sm-1" for="textinput"></label>
<div class="col-sm-3">
<%= f.text_field :zip, class: 'form-control input-sm', placeholder: "Zip" %>
</div>
</div>
</div>
<br>
<div class="form-group">
<label class="col-sm-1" for="textinput"></label>
<%= f.submit "Save", class: 'btn btn-sm btn-success' %>
</div>
<% end %>
Я попытался изменить URL-адрес, чтобы опубликовать или создать и использовать час в моей форме редактирования ... но он продолжает давать мне маршрут не соответствует ошибок.
No route matches {:action=>"patch", :controller=>"hotlines", :person_id=>"2"}
Вот форма с точки зрения и поставить или патч в качестве действия:
<% @hotlines.each do |h| %>
<div id="log" class="visable">
<p>View Log</p>
<%= "City: " + h.city %><br>
<%= "Zip: " + h.zip %><br>
</div>
<br>
<div id="edit" class="visable">
<p>Edit Log</p>
<%= form_for h, :url => {:action => "patch"} do |f| %>
<div class="row top-buffer">
<div class="form-group">
<label class="col-sm-1 rt-label" for="textinput">Address</label>
<div class="col-sm-3">
<%= f.text_field :city, class: 'form-control input-sm', placeholder: "City" %>
</div>
<label class="col-sm-1" for="textinput"></label>
<div class="col-sm-3">
<%= f.text_field :zip, class: 'form-control input-sm', placeholder: "Zip" %>
</div>
</div>
</div>
<br>
<div class="form-group">
<label class="col-sm-1" for="textinput"></label>
<%= f.submit "Save", class: 'btn btn-sm btn-success' %>
</div>
<% end %>
</div>
<% end %>
Не уверен, если это необходимо, но вот несколько битов из моего кода.
Controller (Я понимаю, что обновление будет неполным, но я не могу показаться, чтобы получить это даже сделать редактирование)
class HotlinesController < ApplicationController
def index
@person = Person.find(params['person_id'])
#binding.pry
#@person = Person.find(params: id)
#@hotlines = Hotline.where(person_id: @person.id)
@hotlines = Hotline.where(person_id: params['person_id'])
end
def new
@new_hotline = Hotline.new
end
def create
@new_hotline = Hotline.new(hotline_params)
@new_hotline.person_id = params['person_id']
if @new_hotline.save
redirect_to person_hotlines_path(params['person_id']), notice: "Hotline was added successfully."
else
flash[:error] = "Error creating hotline. Please try again."
render :new
end
end
def update
@person = Person.find(params['person_id'])
@update_hotline = Hotline.find(params[:id])
if @update_hotline.update_attributes(person_params)
redirect_to person_hotlines_path(params['person_id']), notice: "Person was updated successfully."
else
flash[:error] = "Error saving person. Please try again."
render :edit
end
end
private
def hotline_params
params.require(:hotline).permit(:person_id, :city, :zip)
end
end
Маршруты
devise_for :users
resources :users, only: [:update, :index, :new, :edit, :create]
resources :dashboard, only: [:index]
resources :people do
resources :hotlines, only: [:index, :create, :update, :new]
end
post 'dashboard/search'
get '/person/:id', to: 'person#show'
get 'welcome/index'
get 'welcome/about'
root to: 'welcome#index'
Спасибо Marcin, но используя '<% = form_for h,: url => {: action => "update",: method =>: put} do | f | %>» я получаю 'нет соответствующего маршрута {: действие => "обновление",: контроллер => "горячие линии",: метод =>: положи: person_id => "2"}' Использование грабли маршруты Я вижу person_hotline PATCH /people/:person_id/hotlines/:id(.:format) hotlines # update PUT /people/:person_id/hotlines/:id(.:format) hotlines # update ' –
Вы пытаясь создать URL-адрес для вложенных ресурсов. Именованные маршруты были бы лучше, если бы хэш с помощью: action /: method try: 'code' (person_hotline_path (person, hotline). Дополнительная информация и примеры [ссылка] (http://guides.rubyonrails.org/routing.html#nested- Ресурсы) –