我正在尝试编写一个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控制器实际存在?
请记住,我已经成功地在帖子表单中创建了一个隐藏字段,但我不喜欢用户能够使用开发人员工具编辑该值的事实,允许他们更改帖子的内容去。。
答案 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]
访问