Боевые рельсы CRUD на одной странице - PullRequest
0 голосов
/ 31 января 2012

Я пытаюсь создать немного необычный компонент редактирования в моем приложении rails 3.0, которое содержит селектор записей в верхней части страницы и форму редактирования во второй половине страницы, которая оказывается болеесложнее, чем я ожидал.

Селектор записей вверху дает вам список записей в окне списка и кнопку отправки, которая вызывает метод редактирования в контроллере, который выполняет поиск по идентификатору записи и возвращаетстраница указателя.

before_filter :load

def index
end

def edit
  render :action => "index"  
end


def update
  if @project.update_attributes(params[:project])
    flash[:notice] = "Successfully updated project."
  end

  render :action => 'index'
end

def load
  @projects = Project.order("name asc")
  unless params[:id].nil?
    @project = Project.find(params[:id])
  else
    @project = Project.new
  end
end

Как видно из приведенного выше кода, я не хочу оставлять страницу указателя в любой момент.

Пока это работает, я могу выбратьпроект, отредактируйте информацию и нажмите «Сохранить».

К сожалению, когда вызывается обновление и отображает страницу индекса, она не возвращает параметры [: id] методу индекса, поэтому форма становится пустойто есть он не помнит, какой проект вы редактировали.

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

Я не уверен, что делать с htis, или если я подхожу к этому компоненту совершенно неправильно.

Любая обратная связь будет принята с благодарностью:)

Спасибо

Ответы [ 2 ]

0 голосов
/ 31 января 2012

К сожалению, когда вызывается update и отображает страницу индекса, она не возвращает параметры [: id] обратно методу index, поэтому форма становится пустой, то есть она не запоминает, каким проектом вы былиредактирование.

Итак, вы обновляете @project.И ты звонишь render.Таким образом, при рендеринге index, @project это либо новый проект (если params[:id] не задан), либо существующий.Но что насчет @project, который вы имели в своем update?Вам просто нужно сохранить это и не перезаписывать его с помощью Project.new, если params[:id] пусто.Почему бы не заменить загрузочный фильтр, например, на этот?(не проверено)

def load
    @projects = Project.order("name asc")

    unless @project
        unless params[:id].nil?
            @project = Project.find(params[:id])
        else
            @project = Project.new
        end
    end
end

Если вы действительно хотите положиться на params[:id], вы можете заменить render на что-то вроде redirect_to projects_path(:id => @project.id), но тогда вам не хватает информации об ошибках в вашем объекте проекта,который вы можете отобразить.

0 голосов
/ 31 января 2012

Я предполагаю, что в index.html.erb вы используете один метод выбора помощника . Эти методы могут по-разному определять выбранный элемент, посмотрите в документе метод, который вы используете. При необходимости используйте переменную экземпляра класса в методе update, чтобы задать идентификатор для выбора, и используйте его в index.html.erb.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...