2017-03-05 62 views
1

我正在关注Ruby on Rails的Lynda.com教程。在遵循它的时候,当被要求做一个表单时,我使用普通的HTML代码而不是使用form_for方法。所以我的表单现在看起来像下面我已经使用参数数组来传递值。由于这是我的edit.html.erb文件,我还声明了一个值字段,我将显示以前的数据值。在Ruby on Rails的视图中显示以前从数据库添加的值

现在,例如,我的名字等于“我的长名”。在编辑视图中只显示“我的”部分。即只显示主题名称的第一部分。

注意:我还有一个'显示'视图,其中列出了特定主题的详细信息。有全名(“我的长名字”)正确显示。

那么为什么我不能在这里工作?

<!DOCTYPE html> 
<html> 
<head></head> 
<body> 

    <%= csrf_meta_tags %> 
    <div class="subjects index"> 
    <h2>Update Subject</h2> 
    <form action="/subjects/<%= @subject.id %>" method="post"> 
     <input type="hidden" name="_method" value="patch" /> 
     <div class="row"> 
     <div class="input-field col s12 l5"> 
      <input id="name" name="subject[name]" value= <%= @subject.name %> type="text" class="validate" > 
      <label for="name" data-error="wrong" data-success="right">Name</label> 
     </div> 
     </div> 
     <div class="row"> 
     <input type="submit" value="Update Subject" /> 
     </div> 

     <%= link_to("Back",'/subjects',:class => 'action index') %> 
    </form> 
    </div> 

</body> 
</html> 

回答

1

看来你缺少名称输入的value参数后面的引号。

没有他们,你得到的HTML:<input id="name" name="subject[name]" value=My long name type="text" class="validate" >

所以longname变得属性他们自己以及(它们是有效的定制有效的属性在HTML5)。

它应该是这样的: <input id="name" name="subject[name]" value="<%= @subject.name %>" type="text" class="validate" >

但请使用内置的forminput助手,被认为是最佳做法。他们以较少的努力生成所有必要的HTML。

+0

谢谢!添加引号解决了这个问题。 – TargetBlank

0

为什么不能使用Rails'es内置的form_for辅助方法? Rails用于使用ruby生成HTML动态,而不是创建HTML手册。 你会然后只是有:

<%= render 'form', subject: @subject %> 

这将解决您的问题将自动

+0

虽然它没有回答这个问题,但你说得对,通过不使用Rails的助手是一种反模式。 – Vlad

+0

我正在使用物化作为前端。当我尝试设计窗体风格时,它并没有像我想的那样结束。但是,我只是试图将这两者结合在一起,因为我没有太多的知识来有效地使用RoR。 所以,我会再说一遍,因为我也明白内置方法是前进的方式。非常感谢! – TargetBlank

1

<input id="name" name="subject[name]" value="<%= @subject.name %>" type="text" class="validate" >

或者换句话说,输入的“价值”应该用引号括起来。

+0

非常感谢!它的工作:D – TargetBlank