Ruby on Rails属于很多人

时间:2014-09-16 20:43:00

标签: ruby-on-rails ruby belongs-to has-and-belongs-to-many

以下是我的情况:

项目:

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

  • 的内容从一个项目中检索每个游戏

2 个答案:

答案 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

等内容