这就是我的路线目前的样子:
给出了
在我的主页上,我有一个创建空缺按钮
<%= link_to "plaats", new_employer_vacancy_path(:employer_id)%>
哪个应链接到第一张图片中的行
get '/employers/:employer_id/vacancies/new', to: 'vacancies#new', as: 'new_employer_vacancy'
在vacancies_controller#new中 - 创建我:
def new
@vacancy = Vacancy.new
@employervacancy = Employervacancy.new
end
def create
@vacancy = Vacancy.create(vacancy_params)
createEmployervacancy
redirect_to employer_vacancy_path(current_employer, @vacancy)
end
def createEmployervacancy
@employer = current_employer
Employervacancy.create(vacancy_id: @vacancy.id, employer_id: @employer.id)
end
但每当我点击按钮时,我都会被重定向到我的vacancies_controller中的其他方法,这完全无关紧要。
这怎么可能?我没有清楚地定义,当点击这条路径时,他应该去空位#new?而不是空缺#show_specific_employer_vacancies?
修改
在听完答案之后,我确实与正确的路线联系在一起。 首先,它给了我这个错误。
尝试传递current_employer.id而非@employer之后,我发现以下错误:
答案 0 :(得分:1)
对于您的路线,您最好更改为嵌套路线,以便轻松维护路线。
删除这些代码:
get '/employers/:employer_id/vacancies/:id', to:"vacancies#show_specific_employer_vacancies", as: "employer_vacancy"
get '/employers/:employer_id/vacancies/edit/:id' ...
get '/employers/:employer_id/vacancies/index' ...
get '/employers/:employer_id/vacancies/new' ...
path '/employers/:employer_id/vacancies/:id' ...
变成:
resources :employers do
resources :vacancies
end
尝试使用基本路线,因为您使用标准的简单形式网址。例如:
<%= simple_form_for(@employee, @vacancy) %>
如果使用上面的嵌套路由,simple_form_for
将生成url。
最后,在您的链接中,您必须添加@employer_id
<%= link_to "plaats", new_employer_vacancy_path(:employer_id => @employer_id)%>
我希望这可以帮到你
答案 1 :(得分:-1)
您的路由器无法区分employer_vacancy
和new_emplyer_vacancy
路由,因为:id
参数接受任何操作。因此,当您将浏览器指向&#34; / employer / 5 / vacancies / new &#34;时,路线将采用您的employer_vacancy
路线并指定{{1 } 而不是转到您的{:employer_id => 5, :id => "new"}
路线(因为路线是先到先得的)。
要更正此问题,请在第一条路线中添加约束,以确保只有数字(而不是字符串&#34; new&#34;)被new_employer_vacancy
路线接受:
employer_vacancy
答案 2 :(得分:-1)
正如Wes Foster所说,rails路由器试图找到第一场比赛。
这意味着给定路径/employers/999/vacancies/new
您的路由器会查看路由,当它看到get '/employers/:employer_id/vacancies/:id
时,他认为此路由匹配。因此:employer_id
为999
而:id
为new
。
我建议在雇主路线的末尾加上:id:
...
get '/employers/:employer_id/vacancies/new'
...
get '/employers/:employer_id/vacancies/:id'
顺便说一句,这比添加约束更好,因为: