Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/apache-spark/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails RubyonRails中的一个简单博客没有按预期工作_Ruby On Rails - Fatal编程技术网

Ruby on rails RubyonRails中的一个简单博客没有按预期工作

Ruby on rails RubyonRails中的一个简单博客没有按预期工作,ruby-on-rails,Ruby On Rails,我试图设计一个简单的博客,但结果不是我所期望的。它只涉及两个表:Post表和Comments表 我在评论模型中放置了一个有很多:评论,在评论模型中属于:Post 在后期展示模板中,我有以下内容: <p id="notice"><%= notice %></p> <h1> <%= @post.title %> </h1> <p> <%= @post.body %> </p> &l

我试图设计一个简单的博客,但结果不是我所期望的。它只涉及两个表:Post表和Comments表

我在评论模型中放置了一个
有很多:评论
,在评论模型中
属于:Post

在后期展示模板中,我有以下内容:

<p id="notice"><%= notice %></p>

<h1>
  <%= @post.title %>
</h1>
<p>
  <%= @post.body %>
</p>

<h2>Comments</h2>
<% @post.comments.each do |comment| %>
  <p><%= comment.comment %></p>
  <p><%= time_ago_in_words comment.created_at %> ago </p>
<% end %>

<%= form_for(@post.comments.create) do |f| %>
  <div class="field">
    <%= f.text_area :comment %>
  </div>
  <div class="actions">
    <%= f.submit %>
  </div>
<% end %>

<%= link_to 'Edit', edit_post_path(@post) %> |
<%= link_to 'Back', posts_path %>
def create
    @post = Post.find(params[:post_id])
    @comment = @post.comments.build(params[:comment])
    @comment.save
    redirect_to @post
end
我的问题是,当我创建一个与相关联的评论时,该页面将重定向到评论页面,而我希望它重定向到我评论的帖子。我做错了什么

我的环境在MacOs 10.8.2上 RoR-3.2.10 Ruby 1.9.3p362

在帖子的显示页面中感谢

def show
 @post = Post.find(params[:id]
 @comment = @post.comments.new
end

In View
<%= form_for([@post,@comment])... %>

Routes File Contain 
resources :posts do
  resources :comments
end
def显示
@post=post.find(参数[:id]
@comment=@post.comments.new
结束
鉴于
路由文件包含
资源:员额可以
资源:评论
结束
现在,您的注释控制器在创建操作中具有post_id

CommentsController < ...
before_filter :load_post
def create
  @comment = @post.comments.new(params[:comment])
  .....
end

private
def load_post
 @post = Post.find(params[:post_id]
end
CommentsController<。。。
前过滤器:加载后过滤器
def创建
@comment=@post.comments.new(参数[:comment])
.....
结束
私有的
def装载柱
@post=post.find(参数[:post\u id]
结束

@post.comments.create
将创建实际的注释对象,尽管您不希望在每次显示页面点击时创建注释,

这给了我一个无法将nil转换为精确数字的错误Hey dude remove first
@comment=@post.comments.build(参数[:comment])@comment.save
从创建它是comment controller的一部分您可以根据我的想法基于id重定向到post show页面您应该有嵌套资源我想我的问题可能在路由文件中(很快就会改变)。但是我有一个小问题,这不是一种黑客行为:
私有def load_post@post=post.find(params[:post_id]end
来回答您的“hack”问题。不,它不是,它是rails中的标准模式。尽管如果您只有一个操作,直接从create调用load_post可能比使用before_筛选器更好