2015-05-05 3 views
1

У меня есть пользовательские действия контроллера под названием #load и #save под названием schedules_controller. У меня также есть модель лодки, где лодка has_many: schedules и график belongs_to :boat.Маршрут не совпадает с jQuery с пользовательским действием

Адрес routes.rb;

resources :boats, except: :destroy do 
     post '/schedules/load' => 'schedules#load' 
     post '/schedules/save' => 'schedules#save' 
    end 

Когда я использую эти маршруты, рейк дает;

boat_schedules_load POST /boats/:boat_id/schedules/load(.:format) schedules#load 
boat_schedules_save POST /boats/:boat_id/schedules/save(.:format) schedules#save 

Тогда в моем Schedules_controller;

class SchedulesController < ApplicationController 
before_filter :load_parent 

def save 
    h = params[:event] 
    h.each do |key, value| 
     @boat.schedules.create date: value["date"], notes: value["notes"], price: value["price"], promo: value["promo"], status: value["status"] 
    end 
end 

def load 

end 


def load_parent 
    @boat = Boat.find(params[:boat_id]) 
end 
end 

У меня есть шаблон, в котором я показываю график (календарь) и иметь Jquery, вероятно, путь Jquery это неправильно, но я не знаю, как использовать идентификатор в пути;

overwiev.html.erb;

...... 
<div id="backend"></div> <!--This is for the calendar--> 


<script> 
$(document).ready(function() { 
    $('#backend').DOPBackendBookingCalendarPRO({ 

     'DataURL': '/schedules/load', #THIS IS WRONG I SHOULD SMT LIKE PUT /boat_id/schedules/load 
     'SaveURL': '/:boat_id/schedules/save' 
    }); 
}); 
</script> 

Поэтому, когда я запускаю код, он дает ошибку;

Routing Error 

No route matches [POST] "/schedules/load" 

У меня также есть load.json.erb файл, в котором я хотел бы, чтобы загрузить данные из базы данных,

<% schedule = @boat.schedules.all %> 

<% if schedule.blank? %> 

{"2010-01-08": {"available":"1", 
          "bind":0, 
          "info":"", 
          "notes":"", 
          "price":"20", 
          "promo":"", 
          "status":"" 
    }} 

<% else %> 

{"<%= schedule.last.date %>": {"available":"<%= schedule.last.available %>", 
          "bind":"<%= schedule.last.bind %>", 
          "info":"<%= schedule.last.info %>", 
          "notes":"<%= schedule.last.notes %>", 
          "price":"<%= schedule.last.price %>", 
          "promo":"<%= schedule.last.promo %>", 
          "status":"<%= schedule.last.status %>" 
    }} 


<% end %> 

Потому что я получаю лодку идентификатор на контроллере я думаю <% schedule = @boat.schedules.all %> код должен работает. Однако я попытался вывести маршруты (не вложенные) как;

resources :boats 
post '/schedules/load' => 'schedules#load' 
post '/schedules/save' => 'schedules#save' 

Тогда это дает ошибку;

ActiveRecord::RecordNotFound in SchedulesController#load 

Couldn't find Boat with 'id'= 

ответ

1

Комментарий фильтра в контроллере:

#before_filter :load_parent 

, если вы хотите использовать простые маршруты

Или вам нужно изменить путь в коде сценария, как:

$(document).ready(function() { 
$('#backend').DOPBackendBookingCalendarPRO({ 

    'DataURL': '/boats/' + boat_id + '/schedules/load', #THIS IS WRONG I SHOULD SMT LIKE PUT /boat_id/schedules/load 
    'SaveURL': '/boats/' + boat_id + '/schedules/load' 
}); 
}); 
</script> 

И необходимо передать boat_id

+0

Извините для беспокойства снова, но на этот раз он дает ошибку на JQuery. ''DataURL': '/ boats /' + boat_id + '/ schedules/load'' говорит, что boat_id не определен –

+0

Когда я пытаюсь« DataURL »:'/boats/'+ @ boat.id +'/schedules/load '', поскольку он исходит от контроллера, он дает ошибку, говоря« Неожиданный токен: Illegal » –

+0

Попробуйте использовать его как:« DataURL »:'/boats/'+ <% =" #{@boat.id} "% > + '/ schedules/load' –

Смежные вопросы