【发布时间】:2016-10-04 19:52:27
【问题描述】:
我的表单工作正常,但每当我添加表单验证时,我的选择标签上都会不断收到undefined method empty? for nil:NilClass。我发现我将控制器变量放入表单上的 select 函数的事实导致了问题。
我有很多用于选择标签的选项,所以即使我知道如果我只是将数组粘贴到选择函数中它会起作用,我还是想找到一种方法让它像现在一样保持干净
这是我的控制器
class MembersController < ApplicationController
before_action :find_member, only: [:edit, :update, :delete, :destroy]
before_action :form_vars, only: [:new, :edit, :executives]
def find_member
@members = Member.find(params[:id])
end
...
def new
@members = Member.new
end
def create
@members = Member.new(members_params) #the new Members entry is recreated through the strong params method
@members.is_executive = true #Remove for members feature
if @members.save #if the entry saves
redirect_to({ action: 'executives' }, notice: @members.first_name + ' ' + @members.last_name + ' has been created!') #show all of the present entries
else
render({ action: 'new' }) #redisplay the create an entry page
end
end
end
这是我的表格
<div class="forms">
<%= form_for(@members) do |member| %>
<small>* = Required</small>
<label>First Name*</label><br>
<%= member.text_field :first_name %><br>
<label>Last Name*</label><br>
<%= member.text_field :last_name %><br>
<label>LinkedIn Profile Address</label><br>
<%= member.url_field :linkedinurl %><br>
<label>Photo*</label><br>
<%= member.file_field :avatar %><br>
<%= member.label 'Major*' %><br>
<%= member.select(:major, @major, selected: @members.major, prompt: 'Select Major') %><br>
<label>E-Mail*</label><br>
<%= member.text_field :email %><br>
<label>Graduation Date</label><br>
<%= member.select(:graduation_date, [1], selected: @members.graduation_date, prompt: 'Month') %>
<%= member.select(:graduation_date, Date.today.year..Date.today.year+5, prompt: 'Year') %><br>
<!-- <%= member.label(:is_executive, "Is this member an executive?") %>
<%= member.check_box(:is_executive) %></br> -->
<label>Executive Position*</label><br>
<%= member.select(:executive_position, @executive, selected: @members.executive_position, prompt: 'Select Position') %><br>
<%= member.submit %>
<b><%= link_to "Cancel", '/members/executives'%></b>
<% end %>
</div>
我的选择标签选项是在应用程序控制器中声明的,因为我在其他模型上以多种形式使用相同的选择标签
class ApplicationController < ActionController::Base
...
def form_vars
@majors = ['Accounting', 'Africana Studies', 'Anthropology', 'Architecture', 'Art', 'Art History', 'Athletic Training', 'Biology', 'Business Administration', 'Chemistry', 'Child and Family Development', 'Civil Engineering', 'Civil Engineering Technology', 'Computer Science', 'Computer Engineering', 'Construction Management', 'Criminal Justice', 'Dance', 'Earth and Environmental Sciences', 'Economics', 'Electrical Engineering', 'Electrical Engineering Technology', 'Elementary Education', 'English', 'Environmental Studies', 'Exercise Science', 'Finance', 'Fire Safety Engineering Technology', 'French', 'Geography', 'Geology', 'German', 'History', 'International Business', 'International Studies', 'Japanese', 'Latin American Studies', 'Management', 'Management Information Systems', 'Marketing', 'Mathematics', 'Mathematics for Business', 'Mechanical Engineering', 'Mechanical Engineering Technology', 'Meteorology', 'Middle Grades Education', 'Music', 'Neurodiagnostics and Sleep Science', 'Nursing', 'Ops & Supply Chain Management', 'Pre-Law', 'Philosophy', 'Physics', 'Political Science', 'Psychology', 'Public Health', 'Religious Studies', 'Respiratory Therapy', 'Social Work', 'Sociology', 'Spanish', 'Special Education', 'Systems Engineering', 'Theatre']
@executive = ['President', 'Vice President', 'Treasurer', 'Secretary', 'Strategic Advisor', 'Director of Strategic Partnerships', 'Director of Programs', 'Director of Public Relations', 'Director of Publications', 'Director of Community Service', 'Director of Fundraising', 'Historian', 'Digital Administrator']
@grad_month = ['May', 'December']
end
end
这样做的最佳方法是什么,以便我可以将数组保留在我的表单文件之外但有有效的验证?我是 Rails 新手,欢迎提供任何其他最佳实践技巧 谢谢!
【问题讨论】:
标签: ruby-on-rails ruby validation model-view-controller embedded-ruby