我是rails的新手,试图弄清楚如何将id从视图传递到控制器。我在下面创建了routes.rb文件我不想要资源,只是为了更好地理解如何传递参数
Rails.application.routes.draw do
get 'sites/edit/:id', to: 'sites#edit'
get 'sites/main'
devise_for :users
root 'sites#main'
# For details on the DSL available within this file, see http://guides.rubyonrails.org/routing.html
end
下面是我的控制器
class SitesController < ApplicationController
def main
@site = Site.all
end
def edit
@site = Site.find(params[:id])
end
private
def site_params
params.require(:site).permit(:title, :subtitle,:name)
end
end
我的网站控制器有两个视图。在main.html.erb
中<h1>Sites#main</h1>
<p><%= current_user.email %> user is signned in </p>
<%= @site.each do |temp| %>
<p><%= temp.name %></p>
<p></p>
<p></p>
<%= link_to "Edit Site", sites_edit_path(@temp) %>
<% end %>
我无法将其链接到正确的控制器。
答案 0 :(得分:0)
您需要替换
<%= link_to "Edit Site", sites_edit_path(@temp) %>
到
<%= link_to "Edit Site", sites_edit_path(temp) %>
您的变量temp
不是@temp
此外,由于sarcastic
建议您需要将路线条目更改为
get 'sites/edit/:id', to: 'sites#edit', as: :sites_edit
答案 1 :(得分:0)
首先:你的编辑路线不应该是
get 'sites/edit/:id', to: 'sites#edit'
相反它应该是get 'sites/:id/edit' => 'sites#edit'
第二:你的方法链接不应该是
<%= link_to "Edit Site", sites_edit_path(@temp) %>
而应该是<%= link_to "Edit Site", sites_edit_path(temp) %>
您可以通过 rake路线来了解您的路线,或者如果您想要浏览器视图