我有模型:消息,我希望所有用户都可以保存描述,我想要所有应用程序中的内容,我得到错误: Rails未定义方法`model_name& #39; 即可。 他似乎无法识别出来的模型:application.html.erb
_header.html.erb
<ul id="drop-nav">
<li><a href="#">Bag</a>
<ul>
<%= simple_form_for (message) do |f| %>
<div class="form-inputs">
<%= f.text_field :description , as: :text %>
<%= f.submit "Save" %>
</div>
<%end%>
</ul>
</li>
</ul>
application.html.erb
<!DOCTYPE html>
<html>
<head>
<title>Calendar</title>
<%= stylesheet_link_tag"application" , :media => "all" %>
<%= javascript_include_tag "application" %>
<%= csrf_meta_tags %>
</head>
<body>
<%= render 'layouts/header' , message: @message%>
<%= yield %>
</body>
</html>
答案 0 :(得分:1)
在应用程序控制器中设置before_filter
before_filter :message
private
def message
@message = Message.new
end
现在,此操作将在每个请求上执行,并且可在整个应用程序范围内使用
在_header.html.erb
中<%= simple_form_for message, url: message_path, method: :post do |f| %>
它将提交给MessagesController #create
在你的MessagesController中
skip_before_action :message
def create
# do stuff
end
答案 1 :(得分:1)
<强>部分强>
错误将出现在form_for
partial
来电
-
目前,你正在调用这样的部分:
<%= render 'layouts/header' , message: @message%>
这可能不会传递您需要的变量,从而阻止simple_form_for
从对象中提取model
名称(它需要)。
为了给您一个解释,simple_form_for
方法建立在Rails中的form_for
方法之上,而Rails又使用您发送的@objects
来构建<form>
完整的:
form_for
生成适当的表单标记并生成表单生成器 知道表单所在模型的对象。输入字段是 通过调用表单生成器上定义的方法创建,这意味着 他们能够生成适当的名称和默认值 对应于模型属性,以及方便的ID等。 生成的字段名称中的约定允许控制器接收 表格数据很好地构造在params中,不费吹灰之力。
简而言之,这意味着如果您要使用simple_form_for
(并且凭借form_for
),您需要将有效的Ruby / Rails对象传递给表单。我相信你错过了部分会阻止这种情况发生。
<强>修正强>
您需要执行以下操作:
<%= render 'layouts/header', locals: { message: @message } %>
应该将正确的数据传递给表单,当然假设数据一开始就存在。为确保这种情况(因为我看到您将其用作布局的一部分),每次调用操作时都需要调用@message
变量:< / p>
#app/controllers/application_controller.rb
class ApplicationController < ActionController::Base
before_action :set_message
private
def set_message
@message = Message.new
end
end
这将每次都设置@message
变量 - 让您能够调用它&amp;每次加载页面时都将其应用到form_for
。