私は StackExchange に似た上下投票を持つアプリに取り組んでいます。
私は次のものを持つことができるようにしたい
- ユーザーが投票をクリックすると、投票テーブルのレコードに 1 が入力されます
- ユーザーが再度投票をクリックすると、レコードが削除されます
^^反対票でも同じことが起こります
また
- ユーザーが投票をクリックすると、投票テーブルのレコードに 1 が入力されます
- ユーザーが代わりに反対票をクリックすると、元のレコードが削除され、新しいレコードが -1 で追加されます
私のテーブルはこんな感じ
USE [MyProject]
GO
/****** Object: Table [dbo].[EventVotes] Script Date: 02/21/2011 15:16:25 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE TABLE [dbo].[EventVotes](
[UserID] [int] NOT NULL,
[EventID] [int] NOT NULL,
[Vote] [int] NOT NULL,
[VoteDate] [datetime] NOT NULL,
CONSTRAINT [PK_EventVotes_1] PRIMARY KEY CLUSTERED
(
[UserID] ASC,
[EventID] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY]
GO
ALTER TABLE [dbo].[EventVotes] WITH CHECK ADD CONSTRAINT [FK_EventVotes_Events] FOREIGN KEY([EventID])
REFERENCES [dbo].[Events] ([ID])
GO
ALTER TABLE [dbo].[EventVotes] CHECK CONSTRAINT [FK_EventVotes_Events]
GO
ALTER TABLE [dbo].[EventVotes] WITH CHECK ADD CONSTRAINT [FK_EventVotes_Users] FOREIGN KEY([UserID])
REFERENCES [dbo].[Users] ([ID])
GO
ALTER TABLE [dbo].[EventVotes] CHECK CONSTRAINT [FK_EventVotes_Users]
GO
これを実装する方法については、良いコンセプトが必要です。VoteController
アクションを呼び出して、 2 つのパラメーターを送信する必要がありますか? bool isUpDown
とint Vote
If isUpDown Then
MyRepository.Delete(EventID, UserID)
MyRepository.SubmitChanges()
End If
MyRepository.Insert(EventID, UserID, Vote)
MyRepository.SubmitChanges()
このロジックに穴があるかどうか、またはこれを達成するためのより良い方法があるかどうかはわかりません。計画は、AJAX を介してすべてを行うことです。
また、ビューには 2 つのフォーム (UP 用と DOWN 用) が必要ですか、それとも jQuery でさらに管理を試みる必要がありますか? この特定の問題にアプローチする方法がわかりません。