Rails - 通过link_to

时间:2017-02-13 05:37:43

标签: ruby-on-rails ruby parameters

我正在尝试通过link_to更新game_started属性。我也试过通过hidden_​​field使用form_for而没有运气。

我也一直收到以下错误

  

GamesController#update中的ArgumentError

     

分配属性时,必须将哈希作为参数传递。

使用Rails 5和Ruby 2.4

非常感谢任何解释!

show.html.erb

<% if @game.game_started %>
  # some code
<% else %>
  <%= link_to "Start The Game", game_path(@game, :game_started => true), :method => :put %>
<% end %>

GamesController

def edit
end

def update
  @game = Game.find(params[:id])

  if @game.update_attributes (params[:game_started])
    redirect_to @game
  end
end

def game_params
  params.require(:game).permit(:game_type, :deck_1, :deck_2, :user_1, :user_2, :game_started)
end

3 个答案:

答案 0 :(得分:0)

将其更改为

if @game.update_attributes (game_started: params[:game_started])
  redirect_to @game
end

答案 1 :(得分:0)

show.html.erb 应更改为

<%= link_to "Start The Game", game_path(@game, :game => {:game_started => true}), :method => :put %>

控制器应为

if @game.update_attributes (game_started: params['game']['game_started'])
  redirect_to @game
end

答案 2 :(得分:0)

错误告诉您,您正在将错误的参数传递给update_attributes方法调用。它期待像{game_started: params['game_started']}这样的哈希,而你只是给它params['game_started']的值。当你给它一个值时,它不知道要更新的模型中的哪个字段。所以将代码更改为:

```

if @game.update_attributes(game_started: params[:game_started])
   redirect_to @game
end

```