【问题标题】:Rails rendering wrong partialRails 渲染错误的局部
【发布时间】:2017-08-23 08:19:57
【问题描述】:

我已成功呈现一个显示控制器(抽奖)的 ajax 请求。在新模式中,我试图从另一个控制器(电子邮件)呈现部分,但我从抽奖控制器获取新表单。当我查看终端时,它说我正在渲染 raffles/_new 和 emails/_new,但是没有显示电子邮件表单。这是终端信息:

Raffle Load (0.2ms)  SELECT  "raffles".* FROM "raffles" WHERE 
    "raffles"."id" = $1 LIMIT $2  [["id", 6], ["LIMIT", 1]]
      Rendering raffles/show.js.erb
      Rendered layouts/_errors.html.erb (0.5ms)
      Rendered raffles/_form.html.erb (12.0ms)
      Rendered emails/_new.html.erb (21.5ms)
      Rendered raffles/_show.html.erb (37.5ms)
      Rendered raffles/show.js.erb (51.3ms)

我的抽奖控制器的表演动作有:

def show
 @raffle = Raffle.find(params[:id])
 @email = Email.new
end

我的节目视图:

<%= render '/emails/new', :locals => { :raffle_id => @raffle.id, :email => @email } %>

emails/new 是呈现“表单”的部分,而表单是:

<%= form_for email do |f| %>
  <%= f.text_field :email, :placeholder => "Your Email" %>
  <%= f.hidden_field :raffle_id, :value => raffle_id %>
  <%= f.submit "Enter", :class => 'btn-pop' %>
<% end  %>

出于某种原因,我的节目展示的是抽奖新表格,而不是电子邮件新表格。有人知道发生了什么吗?

【问题讨论】:

    标签: ruby-on-rails ajax forms render partials


    【解决方案1】:

    我认为这不是正确的方法,因为它不会让我的代码分开。但我的解决方法是将电子邮件表单硬编码到抽奖的显示视图中。

    <h3><%= @raffle.title %></h3>
    <h5><%= @raffle.draw_date %> at <%= @raffle.draw_time %></h5>
    <h5><strong>Raffle Closes:</strong> April 25th at 4:00 pm</h5>
    <p><%= @raffle.description %></p>
    <%= form_for @email, :url => new_email_path do |f| %>
      <%= f.text_field :email, :placeholder => "Your Email" %>
      <%= f.hidden_field :raffle_id, :value => @raffle_id %>
      <%= f.submit "Enter", :class => 'btn-pop' %>
    <% end  %>
    

    【讨论】:

    • 虽然有问题,但在提交时,没有与 [POST] "/email/new" 匹配的路由。
    • 通过将“form_for '@'email, :url => new_email_path”更改为“form_for '@'email, :url => emails_path”解决了问题
    猜你喜欢
    • 2015-12-16
    • 2016-11-12
    • 1970-01-01
    • 1970-01-01
    • 2018-04-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多