【问题标题】:Why isn't Ruby on Rails correctly generating the 'notice' HTML?为什么 Ruby on Rails 不能正确生成“通知”HTML?
【发布时间】:2010-10-16 20:27:45
【问题描述】:

在我看来嵌入的 ruby​​ 代码是……

<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

非常感谢!

【问题讨论】:

    标签: ruby-on-rails notifications query-string


    【解决方案1】:

    我的经历与 BeachRunnerJoe 完全相同,并在这里找到了答案。因为我不喜欢任何东西,所以我做了一些自己的研究。我知道这个问题/答案已经有一年多了。尽管如此,我想我还是会发布一个迟到的答案。

    以下内容对我有用:

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

    redirect_to 方法有两个参数:options 和 *response_status*。如果没有额外的 { },Ruby 会将所有参数解释为属于 options,因此在 URL 的 options 中包含 :notice 哈希。

    希望这会有所帮助。

    彼得

    【讨论】:

      【解决方案2】:

      尝试使用类似的方式在控制器中分配值

      @notice_text = params[:notice]
      

      然后你可以使用类似的东西

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

      在你看来。

      You may wish to read the answer to this question 更明确地处理通过 URL 查询字符串传递变量。

      【讨论】:

      • 我不明白,那么'notice'方便方法的意义何在?如果我使用 :notice => '文章已成功创建'设置通知。在我的控制器中,'' 不应该显示它吗?
      • flash[] 哈希实际上是不同的东西。您也可以从控制器分配给它。你可能想看看这篇关于“Rails 中有用的闪存消息”的帖子——rubypond.com/blog/useful-flash-messages-in-rails
      • 谢谢,乔,感谢您的帮助。我想我要问的是,我的代码不应该为我正在尝试做的事情工作吗?
      • 嗯——这取决于。在视图中,'notice' 没有任何意义,即使您尝试从控制器分配一些东西给它。提供给视图的闪存哈希在这个意义上是特殊的。您传递到视图中的其他内容需要使用“@”前缀;因此是“@notice_text”。因此,只要您将 params[] 哈希中的 URL 查询字符串值分配给控制器中的某些内容(无论是 flash[] 哈希还是示例中的“@notice_text”之类的变量),您就可以在视图中获取它.我们没有看到你的控制器代码,所以我不能说它是否完全正确......
      【解决方案3】:

      您的代码不起作用,因为“通知”便捷方法使用了 flash,而您想要显示参数,而不是 flash。尝试不要进行重定向并在参数中分配通知,而是先将通知分配给 flash 变量,然后再重定向。

      if @project.save
        flash[:notice] = 'Project was successfully created'
        redirect_to project_path(@project)
      end
      

      【讨论】:

      • 我刚刚用我的控制器代码更新了我的问题,这不应该吗?再次感谢!
      • 不,这行不通,因为您在重定向调用中传递了 :notice =&gt; 'Project ...',它在 params 哈希中传递了通知变量(作为 url 中的 get 变量)。您需要在 flash 中指定 notice 变量。试试这个:format.html { flash[:notice] = 'project success' and redirect_to(:action =&gt; :show, :id =&gt; @project.id) }
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-08-22
      • 2012-12-27
      • 1970-01-01
      • 2013-04-18
      • 2011-08-02
      相关资源
      最近更新 更多