我對Rails有個疑問。我在我的數據庫沒有主鍵與這些列 - person_id,年,工資表。我的問題是當我想編輯其中一個薪水時。我無法理解如何去做。這是我的代碼:沒有主鍵的Rails表
薪金控制器:
def index
@salaries = Salary.all
end
def edit
@salary = Salary.find_by_person_id_and_year(params[:person_id], params[:year])
@people = Person.all
end
index.html.erb
<% @salaries.each do |salary| %>
<b><%= salary.person.Name %></b>
<b><%= salary.Year %></b>
<b><%= salary.Amount %></b>
<%= link_to "Edit", edit_salary_path(salary.person_id, salary.year)%>
<% end %>
所以,我想補充這我的routes.rb:
get 'salaries/index', :to => 'salaries#index',:as => 'salaries'
get 'salaries/:person_id/:year', :to => 'salaries#show', :as => 'salary'
get 'salaries/new/:person_id/:year', :to => 'salaries#edit', :as => 'new_salary'
get 'salaries/edit/:person_id/:year', :to => 'salaries#edit', :as => 'edit_salary'
put 'salaries/:person_id/:year', :to => 'salaries#update'
post 'salaries/:person_id/:year', :to => 'salaries#create'
delete 'salaries/:person_id/:year', :to => 'salaries#destroy'
,但我在我的_form.html.erb中有這樣的錯誤信息:「undefined method`join'for nil:NilClass」on this line:<%= form_for(@s alary)do | f | %>
def edit
@person_id = params[:person_id]
@year = params[:year]
@salary = Salary.find_by_person_id_and_year(params[:person_id], params[:year])
@people = People.all
end
def update
@people = People.all
@salary = Salary.new(params[:salary])
if @salary.save
flash[:success] = "Successfully edited salary"
redirect_to salaries_path
else
@title = "Edit salary"
render 'edit'
end
end
_form.html.erb
<%= form_for(@salary, :url => salaries_path(:person_id => @person_id, :year => @year)) do |f| %>
謝謝,它的工作原理,但奇怪的是,現在我的_form.html.erb中有這個錯誤消息:「未定義的方法'連接爲零:NilClass」在這一行:<%= form_for(@salary)do | f | %> – user1107922
您需要稍微更改form_for以應對與約定的區別:form_for(@salary,:url => salaries_path(:person_id => X,:year => Y))do | f |根據需要使用您的參數 –
好的,但爲什麼現在不能在調用更新或創建時保存到數據庫。我的網址是http://0.0.0.0:3000/salaries/index?year=2013,並沒有更新我的分區 – user1107922