【问题标题】:Missing template in RoR applicationRoR 应用程序中缺少模板
【发布时间】:2014-06-27 06:05:18
【问题描述】:

在我的 ruby​​ on rails 应用程序中,我想将控件值放入控制器页面:

    below is view page:
<%= form_for :managerviewresume, :url => { :method => :post, :action => :managerviewresume }) do |f| %>
        <table class="table" width="100%">
            <tr>
                <td><%= @selection %></td> //Here I am checking radio button value
                <td>
                    <label style="font-size:small;">Selected?</label>
                    <label class="radio inline" style="font-size: small">
                    </br>&nbsp;&nbsp;&nbsp;
                    <%= f.radio_button :select, "Yes", :id => "rb_select1" %>
                    Yes
                    </label>&nbsp;&nbsp;
                    <label class="radio inline" style="font-size: small">
                    <%= f.radio_button :select, "No", :id => "rb_select2" %>
                    No
                    </label>
                </td>
            </tr>
            <tr>
                <td>
                    <%= f.submit "Save", { :class => "stylbutton" } %>
                </td>
            </tr>
        </table> 
    <% end %>

下面是控制器页面:

class ManagersController < ApplicationController
  def managerviewresume
    @selection = params[:select]
    render "managerviewresumes"
  end
end

在控制器的页面中,我在这一行遇到错误render 'managerviewresumes'

Missing template managers/managerviewresumes, application/managerviewresumes with {:locale=>[:en], :formats=>[:html], :handlers=>[:erb, :builder, :raw, :ruby, :jbuilder, :coffee]}. Searched in: * "C:/Sites/VideoResume/app/views" 

以下是路线:

  match '/managerviewresumes',  to: 'managers#managerviewresume', via: 'get'

请建议我应该怎么做才能将radio button 值从view 页面获取到controller 页面。 等待回复。 谢谢。

【问题讨论】:

  • 1.检查参数 2. 错误很明显 Missing template ...
  • 首先我想检查参数是否从视图页面正确获取值到这个变量@selection这就是为什么我在视图页面中这样做&lt;td&gt;&lt;%= @selection %&gt;&lt;/td&gt;
  • 在您的action 中使用puts params.inspect 并检查log
  • 你能指定他们的动作和方法吗?我认为它会解决你的问题,实际上它不知道什么类型的请求是 .e.post 或 get
  • 当我从控制器页面中删除此render "managerviewresumes" 时,我的帖子工作正常,但我希望当我单击单选按钮时,单选按钮值显示在此行的managerviewresumes 页面中@ 987654337@

标签: ruby-on-rails


【解决方案1】:

渲染

首先,您不需要使用render 来呈现与您的action 名称相同的视图

使用 Rails 控制器时,您可以毫无问题地调用它:

#app/controllers/your_controller.rb
Class YourController < ApplicationController
   def your_action
       #-> will automatically render the "your_action" view
   end
end

所以我会删除您对render 操作的引用(因为这是一个不必要的步骤)。这不会直接解决问题,但应确保您的应用程序更多 convention over configuration

--

路线

其次,您可能需要查看resourceful routing

在 Rails 的路由结构中,你可以调用resources :controller 来生成一系列RESTful 路由:

我了解您可能希望继续使用您的操作,但为了正确起见,我建议您查看您的 config/routes.rb 文件并确保您使用尽可能多的基于资源的路由:

#config/routes.rb
resources :managers do
   collection do
       post :managerviewresume
   end 
end

--

表格

最后,我认为你的表单需要改进

您正在使用form_for,它主要用于 ActiveRecord 对象(如果您想创建新记录等。看来您更适合使用form_tag

<%= form_tag managers_managerviewresume_path do %>
    <table class="table" width="100%">
        <tr>
            <td><%= @selection %></td> //Here I am checking radio button value
            <td>
                <label style="font-size:small;">Selected?</label>
                <label class="radio inline" style="font-size: small">
                </br>&nbsp;&nbsp;&nbsp;
                <%= radio_button_tag :select, "Yes", :id => "rb_select1" %>
                Yes
                </label>&nbsp;&nbsp;
                <label class="radio inline" style="font-size: small">
                <%= radio_button_tag :select, "No", :id => "rb_select2" %>
                No
                </label>
            </td>
        </tr>
        <tr>
            <td>
                <%= submit_tag "Save", { :class => "stylbutton" } %>
            </td>
        </tr>
    </table> 
<% end %>

此语法可能需要检查,但这将根据需要发送:select 参数,这不是您当前的表单将执行的操作。

这应该与一个 views/managers/managerviewresume.html.erb 文件相结合以供 Rails 加载

【讨论】:

  • 您的帖子运行良好,但是当我单击单选按钮 No 时,它会显示这个 {"No"=&gt;"{:id=&gt;\"rb_select2\"}"},当我单击单选按钮 Yes 时,它会显示这个 {"Yes"=&gt;"{:id=&gt;\"rb_select1\"}"} ,我想要只得到NoYes
  • 我认为这与 radio button 本身的语法有关 - 你最好这样做:radio_button_tag("No", "0", false, id: "rb_select1" )
  • 我认为你必须像这样包含labelstackoverflow.com/questions/746387/… - 你最好使用label_tag&lt;%= label_tag 'rb_select1', 'No' %&gt;
  • 我在你的帖子中使用这个&lt;%= radio_button_tag :select, "Yes", :id =&gt; "rb_select1" %&gt;,它工作正常,但是为什么它检查No单选按钮,当我检查Yes单选按钮并点击保存按钮时,页面刷新并选中单选按钮No。为什么?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-04-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多