以下是我的情况:
项目:
has_many :games
用户:
has_many :games
游戏:
belongs_to :user
belongs_to :item
在我的项目页面上,我有一个创建新游戏的链接。如何以安全的方式获取商品ID? 因为在我的数据库中,我需要为1个游戏存储user_id和item_id。现在,我这样做只会自动存储user_id:
def create
@game = current_user.games.build(game_params)
if @game.save
redirect_to root_url
else
render 'pages/home'
end
end
private
def game_params
params.require(:game).permit(:time, :score)
end
我认为添加game_params:item_id不是正确的方法而且不安全?!
这是想要的场景:
用户来到项目页面,点击按钮创建游戏,当我记录游戏时我希望能够存储user_id(这部分没问题)和item_id而不再有用户交互。我不希望他选择“手动”我想“强迫它”(感谢他来自的项目页面)
在一个完美的世界里,我想:
使用current_user.games
使用类似item_id.games
答案 0 :(得分:0)
在您的项目页面中使用:
new_form_path(item_id: @item.id)
而不是:
new_form_path
以您的游戏形式:
= form_for @game do |f|
= f.hidden_field :item_id, value: params[:item_id]
在您的游戏控制器中:
params.require(:game).permit(:time, :score, :item_id)
有很多方法可以做你想要的,这是其中之一。
答案 1 :(得分:0)
我认为这就是你要找的东西
<%= button_to "New Game", {controller: 'games', action: 'create'}, params:{item_id: item.id} %>
这将生成类似
的html<form method="post" action="/games/create" class="button_to">
<div>
<input type="hidden" name="item_id" value="YOUR ITEM ID" />
<input type="submit" value="New Game" />
</div>
</form>
当您单击该按钮时,它会将item_id
作为发布请求传递给控制器。由于我不知道您的实际视图是什么样的,因此我不确定您在哪里获取:time
和:score