【问题标题】:A blog using Bootstrap and Ruby on rails在 Rails 上使用 Bootstrap 和 Ruby 的博客
【发布时间】:2013-06-14 21:29:59
【问题描述】:

我的博客评论系统已经卡住了一段时间。我现在需要你的帮助来解决问题并将我推向正确的方向。我正在使用 Ruby on rails 和 twitter 开源框架引导程序。

show.html.erb:

    <h2>Comments</h2>
 <div id="comments">
         <%= render :partial => @post.comments %>
 </div>

 <%= form_for {@post, Comment.new} do |f| %>
        <p>
                <%= f.label :body, "New comment" %><br/>
                <%= f.text_area :body %>
        </p>
        <p><%= f.submit "Add comment" %></p>
<% end %>

</div>

评论控制器:

class CommentsController < ApplicationController
        def create
                @post = Post.find(params[:post_id])
                @comment = @post.comments.create!(params[:comment])
                redirect_to @post
        end
end

Routes.rb

Blog2::Application.routes.draw do
  resources :posts do
    resources :comments, :only => [:create]
  end

comment.html.erb

<%= div_for comment do %>
        <p>
                <strong>
                        Posted <%= time_ago_in_words(comment.created_at) %> ago
                </strong>
                <br/>
                <%= comment.body %>
        </p>
<% end %>

model/comment.rb

class Comment < ActiveRecord::Base
  belongs_to :post
  attr_accessible :body
end

我的两个 (:body) 符号和 form_for 行在 show.html.erb 中出现错误。

这是我的第一篇博客,我对 RoR 还很陌生,感谢一些帮助 :)

第一个错误:

 SyntaxError in Posts#show

Showing /Users/Jdartland/blog_2/app/views/posts/show.html.erb where line #23 raised:

/Users/Jdartland/blog_2/app/views/posts/show.html.erb:23: syntax error, unexpected '}', expecting tCOLON2 or '[' or '.'
...  form_for {@post, Comment.new} do |f| @output_buffer.safe_c...
...                               ^
/Users/Jdartland/blog_2/app/views/posts/show.html.erb:29: syntax error, unexpected keyword_end, expecting '}'
'); end 
       ^
/Users/Jdartland/blog_2/app/views/posts/show.html.erb:32: syntax error, unexpected keyword_ensure, expecting '}'
/Users/Jdartland/blog_2/app/views/posts/show.html.erb:34: syntax error, unexpected keyword_end, expecting '}'
Extracted source (around line #23):

20:          <%= render :partial => @post.comments %>
21:  </div>
22: 
23:  <%= form_for {@post, Comment.new} do |f| %>
24:         <p>
25:                 <%= f.label :body, "New comment" %><br/>
26:                 <%= f.text_area :body %>
Trace of template inclusion: app/views/posts/show.html.erb

Rails.root: /Users/Jdartland/blog_2

第二次错误

ArgumentError in Posts#show

Showing /Users/Jdartland/blog_2/app/views/posts/show.html.erb where line #23 raised:

wrong number of arguments (1 for 0)
Extracted source (around line #23):

20:          <%= render :partial => @post.comments %>
21:  </div>
22: 
23:  <%= form_for @post, Comment.new do |f| %>
24:         <p>
25:                 <%= f.label :body, "New comment" %><br/>
26:                 <%= f.text_area :body %>
Rails.root: /Users/Jdartland/blog_2

Application Trace | Framework Trace | Full Trace
app/views/posts/show.html.erb:23:in `_app_views_posts_show_html_erb___3910729666325401247_70293324213060'
app/controllers/posts_controller.rb:26:in `show'
Request

Parameters:

{"id"=>"2"}

在听从 zeantsoi 的建议后,我更改了 show.html.erb 和 _comment.html.erb。这是我现在剩下的地方 15/6 22.03 已更新!

更新了 show.html.erb:

<h2>Comments</h2>
 <div id="comments">s
         <%= render :partial => 'posts/comment', :locals => {:comments => @post.comments} %>
         <p>
  </div>
</div>

<%= form_for [@post, Comment.new] do |f| %>
  <p>
                <%= f.label :body, "New comment" %><br/>
                <%= f.text_area :body %>

        <%= f.submit "Add comment" %>
  </p>
<% end %> 

当前错误:

howing /Users/Jdartland/blog_2/app/views/posts/show.html.erb where line #28 raised:

undefined method `body' for #<Comment:0x007f88611a1738>
Extracted source (around line #28):

25: <%= form_for [@post, Comment.new] do |f| %>
26:   <p>
27:                 <%= f.label :body, "New comment" %><br/>
28:                 <%= f.text_area :body %>
29:         
30:         <%= f.submit "Add comment" %>
31:   </p>
Rails.root: /Users/Jdartland/blog_2

Application Trace | Framework Trace | Full Trace
app/views/posts/show.html.erb:28:in `block in _app_views_posts_show_html_erb___3992012847724603598_70111860057680'
app/views/posts/show.html.erb:25:in `_app_views_posts_show_html_erb___3992012847724603598_70111860057680'
app/controllers/posts_controller.rb:26:in `show'

【问题讨论】:

  • 请发布错误,一般来说,当您在 S/O 上发布有关某些错误的帖子时
  • 也发布你的 routes.rb
  • 我的 routes.rb 已经发布了 :),不过肯定有很多错误,1 秒
  • @varatis 有错误 :) 这只是我在堆栈上的第二个帖子^^
  • 你需要学习Ruby语言的语法:]

标签: ruby-on-rails ruby ruby-on-rails-3 twitter-bootstrap coding-style


【解决方案1】:

首先,您需要将部分路径传递给您的render :partial,而不是对象:

# app/views/posts/show.html.erb (for a partial located at `app/views/posts/_comments.html.erb`
<%= render :partial => 'posts/comments', :locals => {:comments => @post.comments} %>

# app/views/posts/_comments.html.erb
<% comments.each do |comment| %>
    <%= comment.content %>
<% end %>

其次,为了将您的帖子发送到您的嵌套路由,您需要将您的 form_for 参数括在括号中,而不是花括号:

# app/views/posts/show.html.erb
<%= form_for [@post, Comment.new] do |f| %>

【讨论】:

  • 感谢您的帮助,非常感谢!我仍然得到一个错误。
  • 我刚刚意识到我的 _cmets.html.erb 位于 views/cmets/_cmets.html.erb 上,所以我将部分路径更改为“cmets/comment”。仍然收到错误消息。 (添加到帖子中)。
  • @jdartland,我的代码中有一个小错字,现在我已经更正了。 :locals 和局部哈希之间需要一个哈希火箭 (=&gt;)。试试修改后的语法——它应该可以工作。
  • 非常感谢!解决了我的错误,但又遇到了另一个错误……我在 b4 上苦苦挣扎。我把它贴在帖子里了。
  • 第一篇文章现在更新了当前错误,它说我的 body 方法未定义:S 尽管我的评论类有一个名为“body”的可访问属性。
【解决方案2】:

不确定这是否能解决您的所有问题,但在您的情况下,您需要传递这样的数组

 form_for [@post, Comment.new]

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-01-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多