Использование Best_in_Place для редактирования атрибутов - PullRequest
1 голос
/ 25 марта 2012

Я использую драгоценный камень Best_in_Place, чтобы сделать области на моем сайте доступными для редактирования. У меня есть две модели: ученик и образование, при этом отношения между учениками имеют множество образований. У меня есть функция Best_in_place, работающая при редактировании атрибутов, которые находятся непосредственно в модели Student, например,

<%=best_in_place @student, :name =>

Тем не менее, я не могу заставить его обновить атрибуты образования .. такой строкой, как

<%=best_in_place @education, :college =>

по мнению студентов / шоу, Я получаю ошибку
Запущен PUT "/ education" для 127.0.0.1 в 2012-03-25 13:06:57 -0400

ActionController :: RoutingError (Маршрут не соответствует [PUT] "/ educations")

и это не только не работает, редактируемое место полностью исчезает. Я не могу понять, что является причиной проблемы, все кажется одинаковым для обеих моделей / контроллеров. Мои маршруты очень просты:

resources :students
resources :educations
root :to => 'pages#home'
devise_for :students

как и мои контроллеры:

def update
@student = Student.find(params[:id])

respond_to do |format|
  if @student.update_attributes(params[:student])
    format.html { redirect_to @student, notice: 'Student was successfully updated.' }
    format.json { head :no_content }
  else
    format.html { render action: "edit" }
    format.json { render json: @student.errors, status: :unprocessable_entity }
  end
end
end

против

def update
@education = Education.find(params[:id])
respond_to do |format|
  if @education.update_attributes(params[:education])
    format.html { redirect_to @education, notice: 'Education was successfully updated.' }
    format.json { head :no_content }
  else
    format.html { render action: "edit" }
    format.json { render json: @education.errors, status: :unprocessable_entity }
  end
 end
end

Если я разгребаю маршруты, я получаю:

educations GET    /educations(.:format)               educations#index
                          POST   /educations(.:format)               educations#create
            new_education GET    /educations/new(.:format)           educations#new
           edit_education GET    /educations/:id/edit(.:format)      educations#edit
                education GET    /educations/:id(.:format)           educations#show
                          PUT    /educations/:id(.:format)           educations#update
                          DELETE /educations/:id(.:format)           educations#destroy
students GET    /students(.:format)                 students#index
                          POST   /students(.:format)                 students#create
              new_student GET    /students/new(.:format)             students#new
             edit_student GET    /students/:id/edit(.:format)        students#edit
                  student GET    /students/:id(.:format)             students#show
                          PUT    /students/:id(.:format)             students#update
                          DELETE /students/:id(.:format)             students#destroy

Любые указатели очень помогли бы.

1 Ответ

0 голосов
/ 30 июля 2012

Две вещи:

  1. Ваш синтаксис представления отключен. Вы закрываете свои теги с => вместо %>. Попробуйте вместо этого:

    <%=best_in_place @student, :name %>

    <%=best_in_place @education, :college %>

  2. Попробуйте обновить respond_to блоки для format.json до respond_with_bip(@student). Это должно позволить пользователю редактировать через javascript, оставляя пользователя на странице, чтобы видеть его обновления через AJAX.

См. ReadMe для best_in_place Ответ контроллера с response_with_bip

См. Обновления ниже:

def update
  @student = Student.find(params[:id])

  respond_to do |format|
    if @student.update_attributes(params[:student])
      format.html { redirect_to @student, notice: 'Student was successfully updated.' }
      format.json { respond_with_bip(@student) }
    else
      format.html { render action: "edit" }
      format.json { render json: @student.errors, status: :unprocessable_entity }
    end
  end
end



def update
  @education = Education.find(params[:id])

  respond_to do |format|
    if @education.update_attributes(params[:education])
      format.html { redirect_to @education, notice: 'Student was successfully updated.' }
      format.json { respond_with_bip(@education) }
    else
      format.html { render action: "edit" }
      format.json { render json: @education.errors, status: :unprocessable_entity }
    end
  end
end
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...