2015-10-14 7 views
0

У меня есть простое приложение, которое имеет модель горячей линии, которая является мангоидным документом. Создание и просмотр прекрасно работают, но редактирование, которое я не могу заставить работать для жизни.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' 

ответ

0

проблема с вашим URL обновление связано с тем, что это не действие и маршрут с именем «patch». Обновите его до:

<%= form_for h, :url => {:action => "update", :method => :put } do |f| %> 

Или используйте указанные маршруты. Эта консольная команда поможет вам доступным маршруты:

"rake routes | grep user" 

И тогда форма редактирования становится:

<%= form_for h, :url => user_path(h) do |f| %> 

Для получения дополнительной информации посетите: http://guides.rubyonrails.org/routing.html

Надеется, что это помогает.

+0

Спасибо 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 ' –

+0

Вы пытаясь создать URL-адрес для вложенных ресурсов. Именованные маршруты были бы лучше, если бы хэш с помощью: action /: method try: 'code' (person_hotline_path (person, hotline). Дополнительная информация и примеры [ссылка] (http://guides.rubyonrails.org/routing.html#nested- Ресурсы) –