Не удается организовать функцию для связанных моделей
Я думаю о решении своей проблемы и мне нужна помощь.
Мне нужно платить пользователям, поэтому у меня есть страница, где администратор видит всех пользователей и может платить каждому из них.
У меня есть модель сайта, которая принадлежит пользователю. Зависит от некоторого атрибута от модели веб-сайта, который я должен платить пользователю, но у пользователя есть много веб-сайтов, и мне не ясно, как это организовать.
Я могу получить все сайты пользователей по телефону
user.websites
РЕДАКТИРОВАТЬ: я не могу получить, как я могу генерировать для каждого сайта отдельную ссылку, потому что мне не нужно суммировать все платежи - мне нужна отдельная ссылка для каждого сайта
Вот моя функция оплаты (оставлен только связанный код):
def pay
...
user = User.find(params[:user_id])
@params_id = params[:user_id]
@websites = user.websites
data = {"actionType" => "PAY",
"receiverList.receiver(0).email"=> user.email,
"receiverList.receiver(0).amount" => website.amount,
...
end
или я должен добавить веб-сайт, каждый на мой взгляд. что-то вроде:
<% @users.each do |user| %>
<%@websites.each do |website|%>
<li>
<%= user.email %>
<%= link_to "Pay", pay_path(user.id, website.amount)%>
</li>
<%end%>
<% end %>
Что вы можете порекомендовать мне, и я буду признателен за любую помощь!
2 ответа
Я не уверен, что правильно понял ваш вопрос, но думаю, что это может вам помочь
<% users.each do |user| %>
<% user.websites.each do |website| %>
<span id="user-email"><%= user.email %></span>
<span id="payment"><%= link_to "Pay #{number_to_currency(website.amount)}", pay_path(user.id, website.id), remote: true, confirm: "Are you sure you want to pay?" %></span>
<% end %>
<% end %>
Насколько я понимаю ваш вопрос, пользователь получает деньги за свои сайты в зависимости от атрибутов сайта. Я бы структурировал это следующим образом:
- создать метод в модели веб-сайта, чтобы вычислить "ценность" данного веб-сайта
создайте метод в пользователе, суммируя значения для всех сайтов в user.website, например, с
total = user.websites.inject{ |sum,website| сумма + веб-сайт.значение}
используйте этот последний метод, чтобы получить сумму в вашем действии контроллера. Он не должен вычисляться в контроллере, а тем более в представлении в соответствии с шаблоном MVC.
Говоря об этом, я хотел бы рассмотреть возможность создания специального контроллера для действия оплаты (вместо того, чтобы вставлять его в StaticPagesController, в конце концов, это не статическая страница), возможно, даже модели без постоянства для обработки метода compute_payment, который, по моему мнению, не принадлежит User.rb.