我通过学习Rails挤压我的方式,但由于某种原因,我的观点没有正确呈现!
当我将信息输入到' docs / new'通过Web浏览器页面,不会呈现存储在变量中的文本。相反,它实际上是渲染的实例变量。
我正在使用simple_form gem以及haml gem。
编辑:我使用Rails 4.2.5以及C9 IDE,如果这有任何区别
This is the formatting I want:
This is the formatting I'm getting:
控制器:
class DocsController < ApplicationController
before_action :find_doc, only: [:show, :edit, :update, :destroy]
def index
end
def show
end
def new
@doc = Doc.new
end
def create
@doc = Doc.new(doc_params)
if @doc.save
redirect_to @doc
else
render 'new'
end
end
def edit
end
def update
end
def destroy
end
private
def find_doc
@doc = Doc.find(params[:id])
end
def doc_params
params.require(:doc).permit(:title, :content)
end
端
_form.html.haml:
= simple_form_for @doc do |f|
= f.input :title
= f.input :content
= f.button :submit
show.html.haml:
%h1= @doc.title
%p= @doc.content
new.html.haml:
%h1 New Doc!
= render 'form'
非常感谢任何帮助!
答案 0 :(得分:2)
我认为您表单中的缩进不正确。试试这个:
= simple_form_for @doc do |f|
= f.input :title
= f.input :content
= f.button :submit
And in show.html.haml:
%h1
= @doc.title
%p
= @doc.content
答案 1 :(得分:0)
在你的show.haml中,我认为你没有渲染变量。使用haml,你必须非常专注于渲染。将实例放在具有适当间距
的新行上end_cursor
如果您刚开始使用,可以考虑切换到erb进行渲染,直到获得rails / ruby如何工作的要点,然后再转换为haml
答案 2 :(得分:0)
您忘记在控制器的“显示”操作中定义@doc。这就是原因:
@doc.title
@doc.content
字面显示。
在你的节目动作中更新如下:
def show
@doc = Doc.find(params[:id])
end