【问题标题】:Rails 3 : How to execute action when render :action?Rails 3:渲染时如何执行动作:动作?
【发布时间】:2011-06-07 08:10:39
【问题描述】:

Rails 3 建议使用 Rest。 比如我做博客系统。

### PostsController

# show detail
# tag have lock or unlock status
def show
 @post = Post.find(params[:id])
 @tags = @post.tags.select("posts_tags.tag_lock")
end

### CommentsController

# Posts#show has comment form.
# when you post comment, rails execute this action
def create
 @post = @post.find(params[:id])
 begin
  @post.comments.create!(params[:comment])
 resucue
   @tags = @post.tags.select("posts_tags.tag_lock")
   render 'posts/show'
 end
end

如果 rails 可以通过渲染执行动作,救援代码就很简单。 也许,一个解决方案是采取新的行动。但是,规格没有新的行动...... 什么是更好的?你呢??

对不起,我的英语不好..

【问题讨论】:

    标签: ruby-on-rails ruby-on-rails-3 rest rendering rescue


    【解决方案1】:

    我认为你按照自己的方式做这件事很好(修正了一些错别字):

    ### PostsController
    
    # show detail
    # tag have lock or unlock status
    def show
     @post = Post.find(params[:id])
     @tags = @post.tags.select("posts_tags.tag_lock")
    end
    
    ### CommentsController
    
    # Posts#show has comment form.
    # when you post comment, rails execute this action
    def create
     @post = Post.find(params[:id])
     begin
      @post.comments.create!(params[:comment])
     rescue
       @tags = @post.tags.select("posts_tags.tag_lock")
       render 'posts/show'
     end
    end
    

    【讨论】:

    • 嗨,谢谢!重定向不能保留参数 [:comment] ...所以,我想使用渲染。重定向是最好的方法??
    • @terut 在这种情况下,我认为您可以按照自己的方式进行操作。如果 posts/show 操作变得更加复杂,您可能希望将代码移动到一个方法中,并从 posts/show 和 cmets/create 中调用它,而不是重复自己。
    猜你喜欢
    • 1970-01-01
    • 2013-12-06
    • 1970-01-01
    • 1970-01-01
    • 2011-08-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多