我目前有Check_In
模型 belongs_to 我的Subscriber
模型 has_many Check_Ins
。
Subscriber
模型接收phone_number以及其他一些属性,Check_In
模型接受" visit_amount"作为整数。
在有Subscribes
信息表格的人Check_In
后,我希望subscriber
将Check_In
电话号码放在Check_In
视图表单中,以便选择Subscriber
。
在他们将数字放在表单中之后,class Subscriber < ActiveRecord::Base
has_many :check_ins
validates :first_name, presence: true
validates :last_name, presence: true
validates :email, presence: true
validates :phone_number, presence: true
def date_joined
created_at.strftime("%-m/%-d/%-y")
end
def expiration_date
(created_at + 1.year).strftime("%-m/%-d/%-y")
end
end
模型会将+ 1加到&#34; visit_amount&#34;特别是class Check_In < ActiveRecord::Base
belongs_to :subscriber
end
。
我是铁杆新手,我想知道这是否可行?如果是这样,我该如何实现此功能?我将展示我当前的代码供参考。
MODEL
public static void main(String[] a) throws SQLException {
JFrame frame = new JFrame();
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
**frame.add(new SearchTripList(this));**
frame.pack();
frame.setSize(400, 400);
frame.setVisible(true);
}
**private JFrame mainFrame;
public SearchTripList(JFrame mainFrame) throws SQLException {
this.mainFrame = mainFrame;**
setLayout(new BorderLayout());
clientListElements = new DefaultListModel();
list = new JList(clientListElements);
list.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
list.setVisibleRowCount(listRader);
pnlCenter.add(new JScrollPane(list));
add(pnlCenter, BorderLayout.CENTER);
add(pnlNorth, BorderLayout.NORTH);
add(pnlSouth, BorderLayout.SOUTH);
pnlNorth.add(lvlVeckaAvgang);
pnlNorth.add(lblStad);
pnlNorth.add(lblTidAvgang);
pnlNorth.add(lblAvgangFran);
// pnlCenter.add(new JScrollPane(list));
// list.addListSelectionListener(new ListSelectionListener() {
// public void valueChanged(ListSelectionEvent event) {
// // setBackground(colors[list.getSelectedIndex()]);
//
// }
// });
pnlSouth.add(tfDest);
pnlSouth.add(btnSearch);
pnlSouth.add(btnDone);
createListeners();
}
private class Listener implements ActionListener {
**JFrame mainFrame;
public Listener(JFrame mainFrame){
this.mainFrame = mainFrame;
}**
public void actionPerformed(ActionEvent e) {
if (e.getSource() == btnSearch) {
dest = tfDest.getText();
try {
connect();
writeData();
} catch (SQLException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
}else if (e.getSource()== btnDone){
**PersonInfo newPanel = new PersonInfo(some variables);
this.mainFrame.add(newPanel);**
}
}
〜
frame
我有基本的控制器和视图。此时一切都非常基本,但这是我需要这个应用程序的主要功能。
答案 0 :(得分:1)
:counter_cache可以做你想做的事。在表订阅者中添加一个新的字段调用count_of_check_ins,然后更新类定义,如下所示:
class Subscriber < ActiveRecord::Base
has_many :check_ins
end
class Check_In < ActiveRecord::Base
belongs_to :subscriber, counter_cache: :count_of_check_ins
end
count_of_check_ins将自动更新。
答案 1 :(得分:1)
在您希望表单接受签入的用户输入的页面上,将以下内容放入其相应的操作中(通常是CheckinsController
,new
操作):
def new
@checkin = Check_In.new
end
def create
user = current_user #assuming u have a current user method
@checkin = user.check_in.new(checkin_params)
if @checkin.save
# ...
end
end
private
def checkin_params
params.require(:check_in).permit(:phone_number)
end
然后在您的模型CheckIn
中,您需要添加accepts_nested_attributes_for
,以便添加电话号码。
答案 2 :(得分:1)
以下是您的用例的创建操作。
class CheckInsController < ApplicationController
def create
# First, create a CheckIn that belongs to the current_subscriber
@check_in = CheckIn.new.tap do |check_in|
check_in.subscriber = current_subscriber
end
# Then check if submitted phone number is correct
if params[:phone_number] == current_subscriber.phone_number
@check_in.save
else
# do something when the verification failed
end
end
# more code...
end
希望有所帮助。
如果您在应用中没有身份验证,则可以执行
def create
subscriber = Subscriber.find_by(phone_number: params[:phone_number])
if subscriber
CheckIn.create(subscriber: subscriber)
else
# some code
end
end
最后,您的表单应如下所示:
<%= form_tag check_ins_path do %>
<%= label :phone_number %>
<%= text_field_tag :phone_number %>
<%= submit_tag 'Check In' %>
<% end %>
请勿使用form_for @check_in
,否则您的参数会显示为{ check_in: { phone_number: '1234-56-7890' }
,您必须在创建操作中获取params[:check_in][:phone_number]
,这让我觉得不舒服(请检查没有电话号码)。