我在轨道上写游戏,并试图让用户创建他们的矿(它的采矿游戏)。 我有一个供用户使用的表和一个地雷表。 每个用户都有一个参考。他们的入口上的ID,指向他们在矿井表中的矿井ID。
当我尝试访问/ users / 1 / mines / new时出现错误。
未定义的方法`mines_path'
我无法弄清楚原因。
新形式:
<%= form_for [@mine] do |f| %>
<%= f.label :name %>
<%= f.text_field :name %><br>
<p>Depth: <%= @mine.depth %></p>
<%= f.submit "Submit", id: "submit" %>
<% end %>
控制器:
def new
@user = User.find(params[:user_id])
@mine = @user.mines.new
end
def create
@mine = @user.mines.create(mine_params)
if @mine.save
redirect_to users_mines_path
else
render new_mines_path
end
end
路线:
root 'welcome#index'
resources :sessions, only: [:create]
resources :users do
resources :mines
end
resources :tools, only: [:create]
如何通过用户创建新的矿山?我在控制器中正确执行此操作吗? 谢谢!
答案 0 :(得分:0)
@user.mines.create
将创建我的。因此,请使用@user.mines.new
user_mines_path
user_mine_path(@mine)
new_user_mine_path
位指示:
def create
@mine = @user.mines.new(mine_params)
if @mine.save
redirect_to user_mines_path
else
render new_user_mine_path
end
end
答案 1 :(得分:0)
在您的路线中,您的地雷嵌套在用户中,因此您需要将表单更改为以下内容:
<%= form_for [@user,@mine] do |f| %>
<%= f.label :name %>
<%= f.text_field :name %><br>
<p>Depth: <%= @mine.depth %></p>
<%= f.submit "Submit", id: "submit" %>
<% end %>
或强>
您可以使用路径指定url选项:
<%= form_for @mine, url: user_mines_path(@user) do |f| %>
<%= f.label :name %>
<%= f.text_field :name %><br>
<p>Depth: <%= @mine.depth %></p>
<%= f.submit "Submit", id: "submit" %>
<% end %>
有关表格的详情,请参阅Form Helpers
同样在你的控制器中指出@Vimsha
你需要使用.new而不是.create,因为create会初始化并保存你的我的。
def create
@mine = @user.mines.new(mine_params)
if @mine.save
redirect_to user_mines_path
else
render new_user_mine_path
end
end