我很确定这是一个非常小的错误,但我不明白为什么我不能直接将我的表单添加到我的主页,而不会导致命名错误。
这是我目前的设置,工作得很好。
查看/front_pages/home.html.erb(我的主页)

<!--declare :title to be SHOULD I GET THIS-->
<% provide(:title, "SHOULD I GET THIS") %>
<div class = "container">
    <h1>Should I really spend money on this?</h1>
    <h2>Let's crunch in some numbers and find out...</h2>
    <%= link_to "Get Started", calculate_path, class: "btn btn-info " %>
</div>

view/users/new.html.erb(我的表单现在在这里)
<% provide(:title, "Calculate")%>
<div class = "form-group container">
    <%= simple_form_for @user do |form|%>
        <%= form.error_notification%>
        <%= form.input :price%>
        <%= form.input :wallet%>
        <%= form.button :submit, "Submit", class: "submit"%>
    <%end%>
</div>

控制器/用户控制器.rb
class UsersController < ApplicationController
    def new
        @user = User.new
    end

end

但是,我希望表单直接显示在我的主页上,这样用户就不需要单击额外的按钮来访问表单。我试过了
查看/front_pages/home.html.erb
<!--declare :title to be SHOULD I GET THIS-->
<% provide(:title, "SHOULD I GET THIS") %>
<div class = "container">
    <h1>Should I really spend money on this?</h1>
    <h2>Let's crunch in some numbers and find out...</h2>
    <%= link_to "Get Started", calculate_path, class: "btn btn-info " %>
</div>
<div class = "form-group container">
    <%= simple_form_for @user do |form|%>
        <%= form.error_notification%>
        <%= form.input :price%>
        <%= form.input :wallet%>
        <%= form.button :submit, "Submit", class: "submit"%>
    <%end%>
</div>

它还给我一个名字我想这是因为我没有在首页控制器中启动@user变量,所以我尝试了
class FrontPagesController < ApplicationController
        def new
            @user = User.new
        end
    def home
    end
end

但还是不行。我认为MVC的一些概念我还没有完全掌握。我的代码有什么问题,下次我应该记住什么,这样我就不会犯同样的错误了?
ps:我使用simple_form gem生成表单
编辑:错误消息是NilClass:Class的未定义方法“model\u name”

最佳答案

错误很简单:
NilClass:Class的未定义方法“model\u name”
此错误意味着您试图对未填充任何数据的变量调用model_name方法您没有调用此方法;form_for表示您基本上需要在控制器中声明@user,正如您正确地指出的那样:

class FrontPagesController < ApplicationController

    def new
        @user = User.new
    end
    def home
    end
 end

--
@用户
问题是您正在使用home操作-您正在@user操作中声明您的new变量。这意味着它不会被设置,因为它不会被调用。
你最好这样做:
class FrontPagesController < ApplicationController
    def home
       @user = User.new
    end
 end

这将使@user在您的home操作中可用,这将为您解决错误!

关于ruby-on-rails - 我尝试添加表单时FrontPages#home中的NoMethodError,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/24092106/

10-14 15:49
查看更多