传递params [:id]在Rails中创建方法?

时间:2015-07-09 05:29:20

标签: ruby-on-rails ruby

我正在尝试编写一个create方法来收集用户当前正在查看的配置文件的ID,以及一些与此问题无关的其他信息。但是,因为创建方法POST而不是GET(据我所知),params[:id]的值不存在所以它总是为空。我的代码如下:

class PostsController < ApplicationController
    def new
        @Post = Post.new
    end

    def create
        @Post = Post.new(post_params)   
        @Post.user_id = current_user.id
        @Post.target_id = params[:id] #this

        if @Post.save
            redirect_to :back, notice: "You added a post!"
        end
    end

    private
        def post_params
            params.require(:post).permit(:body)
        end
end

有没有办法从其他地方获取params[:id]的值,可能来自show方法中我的Users控制器实际存在?

请记住,我已经成功地在帖子表单中创建了一个隐藏字段,但我不喜欢用户能够使用开发人员工具编辑该值的事实,允许他们更改帖子的内容去。。

1 个答案:

答案 0 :(得分:0)

如果Target和Post模型之间存在直接关系,您应该在控制器和模型结构中表达这一点:link

这表达了你的意图,它提供了所有的rails自动化,如路由,url助手,表单助手,a.s.o。

在你的具体例子中,我的猜测是Target会有很多帖子:

class Target < ActiveRecord::Base
  has_many :posts
end

class Post < ActiveRecord::Base
  belongs_to :target
end

这将导致以下路线结构:

resources :targets do
  resources :posts
end

要为当前目标创建新帖子,请发布到:

targets/:target_id/posts

目标ID将通过params [:target_id]

访问