Не удается организовать функцию для связанных моделей

Я думаю о решении своей проблемы и мне нужна помощь.

Мне нужно платить пользователям, поэтому у меня есть страница, где администратор видит всех пользователей и может платить каждому из них.

У меня есть модель сайта, которая принадлежит пользователю. Зависит от некоторого атрибута от модели веб-сайта, который я должен платить пользователю, но у пользователя есть много веб-сайтов, и мне не ясно, как это организовать.

Я могу получить все сайты пользователей по телефону

    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.

Другие вопросы по тегам