Почему Ruby on Rails неправильно генерирует HTML-код «уведомления»? - PullRequest
1 голос
/ 17 октября 2010

Встроенный код рубина на мой взгляд ...

<p id="notice"><%= notice %></p>

но когда URL читает ...

http://0.0.0.0:3000/projects/3?notice=Project+was+successfully+created

сгенерированный HTML-код ...

<p id="notice"></p>

Я ожидаю, что это прочитает ...

<p id="notice">Project was successfully created</p>

Что дает?

РЕДАКТИРОВАТЬ: Вот мой код контроллера, просто чтобы облегчить любое любопытство

def create
    @project = Project.new(params[:project])

    respond_to do |format|
      if @project.save
        format.html { redirect_to(:action => "show", :id => @project, :notice => 'Project was successfully created.') }
        format.xml  { render :xml => @project, :status => :created, :location => @project }
      else
        format.html { render :action => "new" }
        format.xml  { render :xml => @project.errors, :status => :unprocessable_entity }
      end
    end
  end

Большое спасибо!

Ответы [ 3 ]

4 голосов
/ 05 июня 2012

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

Для меня работает следующее:

redirect_to( { :action => "show", :id => @project }, { :notice => 'Project was successfully created.' } )

Метод redirect_to принимает два параметра: options и * response_status*.Без лишних {} s Ruby интерпретирует все параметры как принадлежащие options и поэтому включает в себя хэш: note в options для URL.

Надеюсь, это поможет.

Петр

3 голосов
/ 17 октября 2010

Попробуйте назначить значение в контроллере с помощью чего-то вроде

@notice_text = params[:notice]

, и тогда вы сможете использовать что-то вроде

<p id="notice><%= @notice_text %></p>

в вашем представлении.* Возможно, вы захотите прочитать ответ на этот вопрос , который более явно касается передачи переменных через строки запроса URL.

1 голос
/ 17 октября 2010

Ваш код не работает, потому что удобный метод «уведомления» использует вспышку, тогда как вы хотите отображать параметры, а не вспышку. Попробуйте вместо переадресации и назначения уведомления в параметрах сначала назначить уведомление флэш-переменной, а затем перенаправить.

if @project.save
  flash[:notice] = 'Project was successfully created'
  redirect_to project_path(@project)
end
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...